Terminate strings in set_registry_variables()

Alexander Yaworsky yaworsky at migusoft.ru
Sun Nov 14 21:50:30 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	15 Nov 2004 03:02:11 -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