[BROWSEUI] Fix a PIDL leak.
[reactos.git] / dll / win32 / browseui / explorerband.cpp
index 2b398bd..76bd7aa 100644 (file)
@@ -1265,13 +1265,17 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::GetSizeMax(ULARGE_INTEGER *pcbSize)
 HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
 {
     BOOL bHandled;
+    LRESULT result;
+
     if (uMsg == WM_NOTIFY)
     {
         NMHDR *pNotifyHeader = (NMHDR*)lParam;
         switch (pNotifyHeader->code)
         {
             case TVN_ITEMEXPANDING:
-                *theResult = OnTreeItemExpanding((LPNMTREEVIEW)lParam);
+                result = OnTreeItemExpanding((LPNMTREEVIEW)lParam);
+                if (theResult)
+                    *theResult = result;
                 break;
             case TVN_SELCHANGED:
                 OnSelectionChanged((LPNMTREEVIEW)lParam);
@@ -1281,7 +1285,8 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                 break;
             case NM_RCLICK:
                 OnContextMenu(WM_CONTEXTMENU, (WPARAM)m_hWnd, GetMessagePos(), bHandled);
-                *theResult = 1;
+                if (theResult)
+                    *theResult = 1;
                 break;
             case TVN_BEGINDRAG:
             case TVN_BEGINRDRAG:
@@ -1295,7 +1300,8 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                 LPCITEMIDLIST pChild;
                 HRESULT hr;
 
-                *theResult = 1;
+                if (theResult)
+                    *theResult = 1;
                 NodeInfo *info = GetNodeInfo(dispInfo->item.hItem);
                 if (!info)
                     return E_FAIL;
@@ -1304,7 +1310,7 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                     return E_FAIL;
 
                 hr = pParent->GetAttributesOf(1, &pChild, &dwAttr);
-                if (SUCCEEDED(hr) && (dwAttr & SFGAO_CANRENAME))
+                if (SUCCEEDED(hr) && (dwAttr & SFGAO_CANRENAME) && theResult)
                     *theResult = 0;
                 return S_OK;
             }
@@ -1314,7 +1320,8 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                 NodeInfo *info = GetNodeInfo(dispInfo->item.hItem);
                 HRESULT hr;
 
-                *theResult = 0;
+                if (theResult)
+                    *theResult = 0;
                 if (dispInfo->item.pszText)
                 {
                     LPITEMIDLIST pidlNew;
@@ -1322,8 +1329,8 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                     LPCITEMIDLIST pidlChild;
 
                     hr = SHBindToParent(info->absolutePidl, IID_PPV_ARG(IShellFolder, &pParent), &pidlChild);
-                if (!SUCCEEDED(hr) || !pParent.p)
-                    return E_FAIL;
+                    if (!SUCCEEDED(hr) || !pParent.p)
+                        return E_FAIL;
 
                     hr = pParent->SetNameOf(0, pidlChild, dispInfo->item.pszText, SHGDN_INFOLDER, &pidlNew);
                     if(SUCCEEDED(hr) && pidlNew)
@@ -1343,9 +1350,11 @@ HRESULT STDMETHODCALLTYPE CExplorerBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
                         // Navigate to our new location
                         UpdateBrowser(pidlNewAbs);
 
+                        ILFree(pidlParent);
                         ILFree(pidlNewAbs);
                         ILFree(pidlNew);
-                        *theResult = 1;
+                        if (theResult)
+                            *theResult = 1;
                     }
                     return S_OK;
                 }