Nikolay Sivov : comdlg32: Fix some leaks on error paths (Coverity).
Alexandre Julliard
julliard at winehq.org
Mon Apr 2 16:32:52 CDT 2018
Module: wine
Branch: master
Commit: ffd84dc4295b4f0c37870f64712c44ce403419b8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ffd84dc4295b4f0c37870f64712c44ce403419b8
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Apr 1 11:32:24 2018 +0300
comdlg32: Fix some leaks on error paths (Coverity).
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/comdlg32/filedlgbrowser.c | 46 ++++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 20 deletions(-)
diff --git a/dlls/comdlg32/filedlgbrowser.c b/dlls/comdlg32/filedlgbrowser.c
index 1b119f6..5b5323f 100644
--- a/dlls/comdlg32/filedlgbrowser.c
+++ b/dlls/comdlg32/filedlgbrowser.c
@@ -334,7 +334,7 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
UINT wFlags)
{
HRESULT hRes;
- IShellFolder *psfTmp;
+ IShellFolder *folder;
IShellView *psvTmp;
FileOpenDlgInfos *fodInfos;
LPITEMIDLIST pidlTmp;
@@ -355,8 +355,8 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
{
/* SBSP_RELATIVE A relative pidl (relative from the current folder) */
- if(FAILED(hRes = IShellFolder_BindToObject(fodInfos->Shell.FOIShellFolder,
- pidl, NULL, &IID_IShellFolder, (LPVOID *)&psfTmp)))
+ if (FAILED(hRes = IShellFolder_BindToObject(fodInfos->Shell.FOIShellFolder,
+ pidl, NULL, &IID_IShellFolder, (void **)&folder)))
{
ERR("bind to object failed\n");
return hRes;
@@ -368,30 +368,30 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
{
/* Browse the parent folder (ignores the pidl) */
pidlTmp = GetParentPidl(fodInfos->ShellInfos.pidlAbsCurrent);
- psfTmp = GetShellFolderFromPidl(pidlTmp);
-
+ folder = GetShellFolderFromPidl(pidlTmp);
}
else /* SBSP_ABSOLUTE is 0x0000 */
{
/* An absolute pidl (relative from the desktop) */
pidlTmp = ILClone(pidl);
- psfTmp = GetShellFolderFromPidl(pidlTmp);
+ folder = GetShellFolderFromPidl(pidlTmp);
}
- if(!psfTmp)
+ if (!folder)
{
- ERR("could not browse to folder\n");
- return E_FAIL;
+ ERR("could not browse to folder\n");
+ ILFree(pidlTmp);
+ return E_FAIL;
}
/* If the pidl to browse to is equal to the actual pidl ...
do nothing and pretend you did it*/
if (ILIsEqual(pidlTmp, fodInfos->ShellInfos.pidlAbsCurrent))
{
- IShellFolder_Release(psfTmp);
+ IShellFolder_Release(folder);
ILFree(pidlTmp);
TRACE("keep current folder\n");
- return NOERROR;
+ return S_OK;
}
/* Release the current DataObject */
@@ -403,8 +403,13 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
/* Create the associated view */
TRACE("create view object\n");
- if(FAILED(hRes = IShellFolder_CreateViewObject(psfTmp, fodInfos->ShellInfos.hwndOwner,
- &IID_IShellView, (LPVOID *)&psvTmp))) goto error;
+ if (FAILED(hRes = IShellFolder_CreateViewObject(folder, fodInfos->ShellInfos.hwndOwner,
+ &IID_IShellView, (void **)&psvTmp)))
+ {
+ IShellFolder_Release(folder);
+ ILFree(pidlTmp);
+ return hRes;
+ }
/* Check if listview has focus */
bViewHasFocus = IsChild(fodInfos->ShellInfos.hwndView,GetFocus());
@@ -426,7 +431,7 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
/* Release old FOIShellFolder and update its value */
if (fodInfos->Shell.FOIShellFolder)
IShellFolder_Release(fodInfos->Shell.FOIShellFolder);
- fodInfos->Shell.FOIShellFolder = psfTmp;
+ fodInfos->Shell.FOIShellFolder = folder;
/* Release old pidlAbsCurrent and update its value */
ILFree(fodInfos->ShellInfos.pidlAbsCurrent);
@@ -439,9 +444,13 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
/* Create the window */
TRACE("create view window\n");
- if(FAILED(hRes = IShellView_CreateViewWindow(psvTmp, NULL,
- &fodInfos->ShellInfos.folderSettings, fodInfos->Shell.FOIShellBrowser,
- &rectView, &hwndView))) goto error;
+ if (FAILED(hRes = IShellView_CreateViewWindow(psvTmp, NULL,
+ &fodInfos->ShellInfos.folderSettings, fodInfos->Shell.FOIShellBrowser,
+ &rectView, &hwndView)))
+ {
+ WARN("Failed to create view window, hr %#x.\n", hRes);
+ return hRes;
+ }
fodInfos->ShellInfos.hwndView = hwndView;
@@ -461,9 +470,6 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
SetFocus(fodInfos->ShellInfos.hwndView);
return hRes;
-error:
- ERR("Failed with error 0x%08x\n", hRes);
- return hRes;
}
/**************************************************************************
More information about the wine-cvs
mailing list