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