[USETUP]
authorPierre Schweitzer <pierre@reactos.org>
Mon, 7 Feb 2011 23:16:29 +0000 (23:16 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Mon, 7 Feb 2011 23:16:29 +0000 (23:16 +0000)
Fix a really mean bug: wcslen() returns the size in characters whereas MaximumLength has to be in bytes.
Now, this sets MaximumLength to its appropriate size and prevents some memory issues (and buffers having odd size, which is weird for an unicode string...).

svn path=/trunk/; revision=50615

reactos/base/setup/usetup/cabinet.c

index 0f7b0ef..25357a4 100644 (file)
@@ -890,7 +890,7 @@ CabinetExtractFile(PCAB_SEARCH Search)
 
     RtlInitAnsiString(&AnsiString, Search->File->FileName);
     wcscpy(DestName, DestPath);
 
     RtlInitAnsiString(&AnsiString, Search->File->FileName);
     wcscpy(DestName, DestPath);
-    UnicodeString.MaximumLength = sizeof(DestName) - wcslen(DestName);
+    UnicodeString.MaximumLength = sizeof(DestName) - wcslen(DestName) * sizeof(WCHAR);
     UnicodeString.Buffer = DestName + wcslen(DestName);
     UnicodeString.Length = 0;
     RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
     UnicodeString.Buffer = DestName + wcslen(DestName);
     UnicodeString.Length = 0;
     RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);