Nikolay Sivov : schedsvc: Fix xml buffer leak (Valgrind).

Alexandre Julliard julliard at winehq.org
Mon Mar 13 15:40:32 CDT 2017


Module: wine
Branch: master
Commit: f8031d06486761b1068a5b4fa8572d08efdfb8f1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f8031d06486761b1068a5b4fa8572d08efdfb8f1

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Mar 12 13:12:06 2017 +0300

schedsvc: Fix xml buffer leak (Valgrind).

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)




More information about the wine-cvs mailing list