Author: hbelusca
Date: Fri Jun  2 00:05:53 2017
New Revision: 74740

URL: http://svn.reactos.org/svn/reactos?rev=74740&view=rev
Log:
[MKHIVE]: Fix string byte size vs. count in number of characters confusion in 
append_multi_sz_value(); this was already OK in wine's code. Should fix 
corrupted multi-string entries in the livecd registry hives, for example...
In addition, always open the hive file to be created in write mode only.
CORE-13347

Modified:
    trunk/reactos/sdk/tools/mkhive/binhive.c
    trunk/reactos/sdk/tools/mkhive/reginf.c

Modified: trunk/reactos/sdk/tools/mkhive/binhive.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkhive/binhive.c?rev=74740&r1=74739&r2=74740&view=diff
==============================================================================
--- trunk/reactos/sdk/tools/mkhive/binhive.c    [iso-8859-1] (original)
+++ trunk/reactos/sdk/tools/mkhive/binhive.c    [iso-8859-1] Fri Jun  2 
00:05:53 2017
@@ -41,7 +41,7 @@
     printf("  Creating binary hive: %s\n", FileName);
 
     /* Create new hive file */
-    File = fopen(FileName, "w+b");
+    File = fopen(FileName, "wb");
     if (File == NULL)
     {
         printf("    Error creating/opening file\n");

Modified: trunk/reactos/sdk/tools/mkhive/reginf.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/mkhive/reginf.c?rev=74740&r1=74739&r2=74740&view=diff
==============================================================================
--- trunk/reactos/sdk/tools/mkhive/reginf.c     [iso-8859-1] (original)
+++ trunk/reactos/sdk/tools/mkhive/reginf.c     [iso-8859-1] Fri Jun  2 
00:05:53 2017
@@ -120,11 +120,10 @@
     IN HKEY KeyHandle,
     IN PWCHAR ValueName,
     IN PWCHAR Strings,
-    IN ULONG StringSize)
+    IN ULONG StringSize) // In characters
 {
-    ULONG Size;
+    ULONG Size, Total;   // In bytes
     ULONG Type;
-    ULONG Total;
     PWCHAR Buffer;
     PWCHAR p;
     size_t len;
@@ -139,7 +138,7 @@
     if ((Error != ERROR_SUCCESS) || (Type != REG_MULTI_SZ))
         return;
 
-    Buffer = malloc ((Size + StringSize) * sizeof(WCHAR));
+    Buffer = malloc(Size + StringSize * sizeof(WCHAR));
     if (Buffer == NULL)
         return;
 
@@ -164,9 +163,9 @@
 
         if (*p == 0)  /* not found, need to append it */
         {
-            memcpy (p, Strings, len);
+            memcpy(p, Strings, len * sizeof(WCHAR));
             p[len] = 0;
-            Total += len;
+            Total += len * sizeof(WCHAR);
         }
         Strings += len;
     }
@@ -179,7 +178,7 @@
                        0,
                        REG_MULTI_SZ,
                        (PUCHAR)Buffer,
-                       Total * sizeof(WCHAR));
+                       Total + sizeof(WCHAR));
     }
 
 done:


Reply via email to