fixed uninitialized variable warnings and possible buffer overflows when
reading strings from the registry that aren't NULL-terminated
Modified: trunk/reactos/lib/setupapi/devinst.c
_____
Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c 2005-12-11 21:29:07 UTC
(rev 20087)
+++ trunk/reactos/lib/setupapi/devinst.c 2005-12-11 22:13:46 UTC
(rev 20088)
@@ -1872,13 +1872,14 @@
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
goto cleanup;
}
- Buffer[dwLength / sizeof(WCHAR)] = 0;
rc = RegQueryValueExW(hClassKey, L"Icon", NULL, NULL,
(LPBYTE)Buffer, &dwLength);
if (rc != ERROR_SUCCESS)
{
SetLastError(rc);
goto cleanup;
}
+ /* make sure the returned buffer is NULL-terminated */
+ Buffer[dwLength / sizeof(WCHAR)] = 0;
/* Transform "Icon" value to a INT */
*ImageIndex = atoiW(Buffer);
@@ -2065,7 +2066,7 @@
rc = RegQueryValueExW(hKey, L"Installer32", NULL,
&dwRegType, NULL, &dwLength);
if (rc == ERROR_SUCCESS && dwRegType == REG_SZ)
{
- Buffer = MyMalloc(dwLength);
+ Buffer = MyMalloc(dwLength + sizeof(WCHAR));
if (Buffer == NULL)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -2077,12 +2078,14 @@
SetLastError(rc);
goto cleanup;
}
+ /* make sure the returned buffer is NULL-terminated */
+ Buffer[dwLength / sizeof(WCHAR)] = 0;
}
else if
(ERROR_SUCCESS == (rc = RegQueryValueExW(hKey,
L"EnumPropPages32", NULL, &dwRegType, NULL, &dwLength))
&& dwRegType == REG_SZ)
{
- Buffer = MyMalloc(dwLength);
+ Buffer = MyMalloc(dwLength + sizeof(WCHAR));
if (Buffer == NULL)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -2094,6 +2097,8 @@
SetLastError(rc);
goto cleanup;
}
+ /* make sure the returned buffer is NULL-terminated */
+ Buffer[dwLength / sizeof(WCHAR)] = 0;
}
else
{
@@ -2108,6 +2113,7 @@
goto cleanup;
}
*Comma = '\0';
+ DllName = Buffer;
}
else
{