From f8031d06486761b1068a5b4fa8572d08efdfb8f1 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Sun, 12 Mar 2017 13:12:06 +0300 Subject: [PATCH] schedsvc: Fix xml buffer leak (Valgrind). Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- 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 8be8c0dd7fc..c34b4853fd3 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)