[SHELL32]
authorColin Finck <colin@reactos.org>
Wed, 16 Mar 2011 16:46:37 +0000 (16:46 +0000)
committerColin Finck <colin@reactos.org>
Wed, 16 Mar 2011 16:46:37 +0000 (16:46 +0000)
Thomas Faber
- Fix memory leak in RenderHDROP.
  Modifications by me to have just a single return statement in the function.

See issue #5998 for more details.

svn path=/trunk/; revision=51069

reactos/dll/win32/shell32/clipboard.c

index 0c989c6..24fd0d0 100644 (file)
@@ -49,15 +49,16 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
        UINT i;
        int size = 0;
        WCHAR wszFileName[MAX_PATH];
-       HGLOBAL hGlobal;
+       HGLOBAL hGlobal = NULL;
        DROPFILES *pDropFiles;
        int offset;
        LPITEMIDLIST *pidls;
 
        TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl);
 
-       pidls = HeapAlloc(GetProcessHeap(), 0, cidl * sizeof *pidls);
-       if (!pidls) return NULL;
+       pidls = HeapAlloc(GetProcessHeap(), 0, cidl * sizeof(*pidls));
+       if (!pidls)
+               goto cleanup;
 
        /* get the size needed */
        size = sizeof(DROPFILES);
@@ -73,7 +74,8 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
 
        /* Fill the structure */
        hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
-       if(!hGlobal) return hGlobal;
+       if(!hGlobal)
+               goto cleanup;
 
         pDropFiles = (DROPFILES *)GlobalLock(hGlobal);
        offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR);
@@ -91,7 +93,9 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
        ((WCHAR*)pDropFiles)[offset] = 0;
        GlobalUnlock(hGlobal);
 
-       HeapFree(GetProcessHeap(), 0, pidls);
+cleanup:
+       if(pidls)
+               HeapFree(GetProcessHeap(), 0, pidls);
 
        return hGlobal;
 }