Module: wine Branch: stable Commit: 78a3870398d4805a9e6e4ad26d22e4067e8a0b76 URL: http://source.winehq.org/git/wine.git/?a=commit;h=78a3870398d4805a9e6e4ad26d...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Mar 12 13:12:06 2017 +0300
schedsvc: Fix xml buffer leak (Valgrind).
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit f8031d06486761b1068a5b4fa8572d08efdfb8f1) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/schedsvc/schedsvc.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/schedsvc/schedsvc.c b/dlls/schedsvc/schedsvc.c index 8be8c0d..c34b485 100644 --- a/dlls/schedsvc/schedsvc.c +++ b/dlls/schedsvc/schedsvc.c @@ -259,9 +259,10 @@ static int detect_encoding(const void *buffer, DWORD size)
static HRESULT read_xml(const WCHAR *name, WCHAR **xml) { + char *src, *buff; HANDLE hfile; DWORD size, attrs; - char *src; + HRESULT hr = S_OK; int cp;
attrs = GetFileAttributesW(name); @@ -275,7 +276,7 @@ static HRESULT read_xml(const WCHAR *name, WCHAR **xml) return HRESULT_FROM_WIN32(GetLastError());
size = GetFileSize(hfile, NULL); - src = heap_alloc(size + 2); + buff = src = heap_alloc(size + 2); if (!src) { CloseHandle(hfile); @@ -300,9 +301,13 @@ static HRESULT read_xml(const WCHAR *name, WCHAR **xml)
size = MultiByteToWideChar(cp, 0, src, -1, NULL, 0); *xml = heap_alloc(size * sizeof(WCHAR)); - if (!*xml) return E_OUTOFMEMORY; - MultiByteToWideChar(cp, 0, src, -1, *xml, size); - return S_OK; + if (*xml) + MultiByteToWideChar(cp, 0, src, -1, *xml, size); + else + hr = E_OUTOFMEMORY; + heap_free(buff); + + return hr; }
HRESULT __cdecl SchRpcRetrieveTask(const WCHAR *path, const WCHAR *languages, ULONG *n_languages, WCHAR **xml)