From 3804b99e7253a13b383549a6a851e80300841cc5 Mon Sep 17 00:00:00 2001 From: Sven Baars Date: Wed, 6 Feb 2019 11:48:18 +0100 Subject: [PATCH] mstask: Fix some memory leaks on error path (Valgrind). Signed-off-by: Sven Baars Signed-off-by: Alexandre Julliard --- dlls/mstask/task.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c index 6c27b76c959..9a39fc9402b 100644 --- a/dlls/mstask/task.c +++ b/dlls/mstask/task.c @@ -1690,7 +1690,11 @@ static HRESULT WINAPI MSTASK_IPersistFile_Save(IPersistFile *iface, LPCOLESTR ta hfile = CreateFileW(task_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, disposition, 0, 0); if (hfile != INVALID_HANDLE_VALUE) break; - if (try++ >= 3) return HRESULT_FROM_WIN32(GetLastError()); + if (try++ >= 3) + { + hr = HRESULT_FROM_WIN32(GetLastError()); + goto failed; + } Sleep(100); } @@ -1781,13 +1785,16 @@ failed: CoTaskMemFree(comment); CoTaskMemFree(user_data); - CloseHandle(hfile); - if (hr != S_OK) - DeleteFileW(task_name); - else if (remember) + if (hfile != INVALID_HANDLE_VALUE) { - heap_free(This->task_name); - This->task_name = heap_strdupW(task_name); + CloseHandle(hfile); + if (hr != S_OK) + DeleteFileW(task_name); + else if (remember) + { + heap_free(This->task_name); + This->task_name = heap_strdupW(task_name); + } } return hr; }