From 9170cc8225d89f231fd81399c0412b73284b516a Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Mon, 11 Jul 2005 20:36:58 +0000 Subject: [PATCH] Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. --- dlls/msi/registry.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index 012986115c2..c96a766fcfa 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -873,9 +873,18 @@ UINT WINAPI MsiEnumComponentQualifiersW( LPWSTR szComponent, DWORD iIndex, rc = RegEnumValueW(key, iIndex, lpQualifierBuf, pcchQualifierBuf, NULL, NULL, (LPBYTE)full_buffer, &full_buffer_size); + if (rc == ERROR_MORE_DATA) + { + HeapFree(GetProcessHeap(),0,full_buffer); + full_buffer_size+=sizeof(WCHAR); + full_buffer = HeapAlloc(GetProcessHeap(),0,full_buffer_size); + rc = RegEnumValueW(key, iIndex, lpQualifierBuf, pcchQualifierBuf, NULL, + NULL, (LPBYTE)full_buffer, &full_buffer_size); + } + RegCloseKey(key); - if (rc == ERROR_SUCCESS || rc == ERROR_MORE_DATA) + if (rc == ERROR_SUCCESS) { if (lpApplicationDataBuf && pcchApplicationDataBuf) { @@ -898,6 +907,8 @@ UINT WINAPI MsiEnumComponentQualifiersW( LPWSTR szComponent, DWORD iIndex, debugstr_w(lpApplicationDataBuf)); } + HeapFree(GetProcessHeap(),0,full_buffer); + return rc; } -- 2.11.4.GIT