From cdcd6ee01525ef825072c69cd5dc4b5da4a3d0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 3 May 2006 13:56:12 +0000 Subject: [PATCH] Don't double free buffer in case of error svn path=/trunk/; revision=21787 --- reactos/dll/win32/setupapi/parser.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/setupapi/parser.c b/reactos/dll/win32/setupapi/parser.c index a712f63986a..18a7eee1f18 100644 --- a/reactos/dll/win32/setupapi/parser.c +++ b/reactos/dll/win32/setupapi/parser.c @@ -1988,8 +1988,7 @@ SetupGetInfFileListW( /* Allocate memory for file filter */ len = DirectoryPath ? strlenW(DirectoryPath) : MAX_PATH; - pFileSpecification = HeapAlloc( - GetProcessHeap(), 0, + pFileSpecification = MyMalloc( (len + 1 + strlenW(InfFileSpecification) + 1) * sizeof(WCHAR)); if (!pFileSpecification) { @@ -2017,7 +2016,7 @@ SetupGetInfFileListW( hSearch = FindFirstFileW(pFileSpecification, &wfdFileInfo); if (hSearch == INVALID_HANDLE_VALUE) { - HeapFree(GetProcessHeap(), 0, pFileSpecification); + TRACE("No file returned by %s\n", debugstr_w(pFileSpecification)); goto cleanup; } @@ -2053,10 +2052,12 @@ SetupGetInfFileListW( } while (FindNextFileW(hSearch, &wfdFileInfo)); FindClose(hSearch); - ret = TRUE; requiredSize += sizeof(WCHAR); /* Final NULL char */ if (requiredSize <= ReturnBufferSize) + { *pBuffer = '\0'; + ret = TRUE; + } else { SetLastError(ERROR_INSUFFICIENT_BUFFER); @@ -2066,7 +2067,7 @@ SetupGetInfFileListW( *RequiredSize = requiredSize; cleanup: - HeapFree(GetProcessHeap(), 0, pFileSpecification); + MyFree(pFileSpecification); return ret; }