Resend: Terminate strings in set_registry_variables()

yaworsky at migusoft.ru yaworsky at migusoft.ru
Sat Nov 27 00:26:47 CST 2004


ChangeLog:

Terminate strings in set_registry_variables()

Index: dlls/kernel/process.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/process.c,v
retrieving revision 1.80
diff -u -r1.80 process.c
--- dlls/kernel/process.c	30 Oct 2004 02:11:33 -0000	1.80
+++ dlls/kernel/process.c	17 Nov 2004 03:09:37 -0000
@@ -427,17 +427,22 @@
     for (index = 0; ; index++)
     {
         status = NtEnumerateValueKey( hkey, index, KeyValueFullInformation,
-                                      buffer, sizeof(buffer), &size );
+                                      buffer, sizeof(buffer)-2*sizeof(WCHAR), &size );
         if (status != STATUS_SUCCESS && status != STATUS_BUFFER_OVERFLOW)
             break;
         if (info->Type != type)
             continue;
+        memmove( buffer + info->DataOffset + sizeof(WCHAR),
+                 buffer + info->DataOffset, info->DataLength );
+        *((WCHAR*)(buffer + info->DataOffset)) = 0;
         env_name.Buffer = info->Name;
         env_name.Length = env_name.MaximumLength = info->NameLength;
-        env_value.Buffer = (WCHAR *)(buffer + info->DataOffset);
+        env_value.Buffer = (WCHAR *)(buffer + info->DataOffset + sizeof(WCHAR));
         env_value.Length = env_value.MaximumLength = info->DataLength;
         if (env_value.Length && !env_value.Buffer[env_value.Length/sizeof(WCHAR)-1])
             env_value.Length--;  /* don't count terminating null if any */
+        else
+            env_value.Buffer[env_value.Length/sizeof(WCHAR)] = 0;
         if (info->Type == REG_EXPAND_SZ)
         {
             WCHAR buf_expanded[1024];



More information about the wine-patches mailing list