Module: wine Branch: master Commit: a528ddd745f2c2029d60e8fe655fe7bb566776f0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a528ddd745f2c2029d60e8fe65...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Apr 30 22:01:56 2017 +0300
shell32/shellview: Handle NULL folder pointer in SHCreateShellFolderViewEx().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/shlview.c | 3 +++ dlls/shell32/tests/shlview.c | 10 ++++++++++ 2 files changed, 13 insertions(+)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index 2c8b6bd..f815011 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -3806,6 +3806,9 @@ HRESULT WINAPI SHCreateShellFolderViewEx(CSFV *desc, IShellView **shellview) TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n", desc->pshf, desc->pidl, desc->pfnCallback, desc->fvm, desc->psvOuter);
+ if (!desc->pshf) + return E_UNEXPECTED; + *shellview = IShellView_Constructor(desc->pshf); if (!*shellview) return E_OUTOFMEMORY; diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index f5adae5..8603ddb 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1433,6 +1433,16 @@ static void test_SHCreateShellFolderViewEx(void) ok(refCount == 0, "refCount = %u\n", refCount); }
+if (0) +{ + /* Crashes on null shellfolder, on XP/2k3 */ + memset(&csfv, 0, sizeof(csfv)); + csfv.pshf = NULL; + psv = (void *)0xdeadbeef; + hr = SHCreateShellFolderViewEx(&csfv, &psv); + ok(hr == E_UNEXPECTED, "Got 0x%08x\n", hr); + ok(psv == NULL, "psv = %p\n", psv); +} memset(&csfv, 0, sizeof(csfv)); csfv.cbSize = sizeof(csfv); csfv.pshf = desktop;