mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 13:56:56 +00:00
[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 svn path=/trunk/; revision=74740
This commit is contained in:
parent
b03f8990c0
commit
cead3c26ac
2 changed files with 7 additions and 8 deletions
|
@ -41,7 +41,7 @@ ExportBinaryHive(
|
||||||
printf(" Creating binary hive: %s\n", FileName);
|
printf(" Creating binary hive: %s\n", FileName);
|
||||||
|
|
||||||
/* Create new hive file */
|
/* Create new hive file */
|
||||||
File = fopen(FileName, "w+b");
|
File = fopen(FileName, "wb");
|
||||||
if (File == NULL)
|
if (File == NULL)
|
||||||
{
|
{
|
||||||
printf(" Error creating/opening file\n");
|
printf(" Error creating/opening file\n");
|
||||||
|
|
|
@ -120,11 +120,10 @@ append_multi_sz_value(
|
||||||
IN HKEY KeyHandle,
|
IN HKEY KeyHandle,
|
||||||
IN PWCHAR ValueName,
|
IN PWCHAR ValueName,
|
||||||
IN PWCHAR Strings,
|
IN PWCHAR Strings,
|
||||||
IN ULONG StringSize)
|
IN ULONG StringSize) // In characters
|
||||||
{
|
{
|
||||||
ULONG Size;
|
ULONG Size, Total; // In bytes
|
||||||
ULONG Type;
|
ULONG Type;
|
||||||
ULONG Total;
|
|
||||||
PWCHAR Buffer;
|
PWCHAR Buffer;
|
||||||
PWCHAR p;
|
PWCHAR p;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
@ -139,7 +138,7 @@ append_multi_sz_value(
|
||||||
if ((Error != ERROR_SUCCESS) || (Type != REG_MULTI_SZ))
|
if ((Error != ERROR_SUCCESS) || (Type != REG_MULTI_SZ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Buffer = malloc ((Size + StringSize) * sizeof(WCHAR));
|
Buffer = malloc(Size + StringSize * sizeof(WCHAR));
|
||||||
if (Buffer == NULL)
|
if (Buffer == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -164,9 +163,9 @@ append_multi_sz_value(
|
||||||
|
|
||||||
if (*p == 0) /* not found, need to append it */
|
if (*p == 0) /* not found, need to append it */
|
||||||
{
|
{
|
||||||
memcpy (p, Strings, len);
|
memcpy(p, Strings, len * sizeof(WCHAR));
|
||||||
p[len] = 0;
|
p[len] = 0;
|
||||||
Total += len;
|
Total += len * sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
Strings += len;
|
Strings += len;
|
||||||
}
|
}
|
||||||
|
@ -179,7 +178,7 @@ append_multi_sz_value(
|
||||||
0,
|
0,
|
||||||
REG_MULTI_SZ,
|
REG_MULTI_SZ,
|
||||||
(PUCHAR)Buffer,
|
(PUCHAR)Buffer,
|
||||||
Total * sizeof(WCHAR));
|
Total + sizeof(WCHAR));
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue