Author: janderwald
Date: Mon Nov 24 12:05:51 2008
New Revision: 37619
URL:
http://svn.reactos.org/svn/reactos?rev=37619&view=rev
Log:
- Fix heap corruption and memory leak
- patch by Daniel Zimmermann
- CID 707
- bug 3905
Modified:
trunk/reactos/dll/cpl/sysdm/startrec.c
Modified: trunk/reactos/dll/cpl/sysdm/startrec.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/sysdm/startrec.c?r…
==============================================================================
--- trunk/reactos/dll/cpl/sysdm/startrec.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/sysdm/startrec.c [iso-8859-1] Mon Nov 24 12:05:51 2008
@@ -62,7 +62,7 @@
/* get Path to freeldr.ini or boot.ini */
*szSystemDrive = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
- if (szSystemDrive != NULL)
+ if (*szSystemDrive != NULL)
{
dwBufSize = GetEnvironmentVariableW(L"SystemDrive", *szSystemDrive,
MAX_PATH);
if (dwBufSize > MAX_PATH)
@@ -83,15 +83,15 @@
else if (dwBufSize == 0)
{
FailGetSysDrive:
- HeapFree(GetProcessHeap(), 0, szSystemDrive);
+ HeapFree(GetProcessHeap(), 0, *szSystemDrive);
*szSystemDrive = NULL;
- return FALSE;
+ return 0;
}
return dwBufSize;
}
- return FALSE;
+ return 0;
}
static PBOOTRECORD
@@ -454,7 +454,7 @@
HINF hInf;
dwBufSize = GetSystemDrive(&szSystemDrive);
- if (!dwBufSize)
+ if (dwBufSize == 0)
return FALSE;
wcscpy(pStartInfo->szFreeldrIni, szSystemDrive);
@@ -462,6 +462,8 @@
if (PathFileExistsW(pStartInfo->szFreeldrIni))
{
+ /* free resource previously allocated by GetSystemDrive() */
+ HeapFree(GetProcessHeap(), 0, szSystemDrive);
/* freeldr.ini exists */
hInf = SetupOpenInfFileW(pStartInfo->szFreeldrIni,
NULL,
@@ -481,6 +483,9 @@
/* try load boot.ini settings */
wcscpy(pStartInfo->szFreeldrIni, szSystemDrive);
wcscat(pStartInfo->szFreeldrIni, L"\\boot.ini");
+
+ /* free resource previously allocated by GetSystemDrive() */
+ HeapFree(GetProcessHeap(), 0, szSystemDrive);
if (PathFileExistsW(pStartInfo->szFreeldrIni))
{