David Hedberg : shell32: Don' t crash on NULL cmdgroup in DefView OleCommandTarget.

Alexandre Julliard julliard at winehq.org
Mon Nov 8 11:46:20 CST 2010


Module: wine
Branch: master
Commit: 18d31c2799d7539a47b55aaa16508ac64fa49125
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=18d31c2799d7539a47b55aaa16508ac64fa49125

Author: David Hedberg <dhedberg at codeweavers.com>
Date:   Mon Nov  8 00:06:14 2010 +0100

shell32: Don't crash on NULL cmdgroup in DefView OleCommandTarget.

---

 dlls/shell32/shlview.c       |    4 ++-
 dlls/shell32/tests/shlview.c |   44 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 73671c1..a6cea0f 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -2258,7 +2258,7 @@ static HRESULT WINAPI ISVOleCmdTarget_QueryStatus(
               This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
 
     if (!prgCmds)
-        return E_POINTER;
+        return E_INVALIDARG;
     for (i = 0; i < cCmds; i++)
     {
         FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
@@ -2285,6 +2285,8 @@ static HRESULT WINAPI ISVOleCmdTarget_Exec(
 	FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
               This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
 
+	if (!pguidCmdGroup)
+	    return OLECMDERR_E_UNKNOWNGROUP;
 	if (IsEqualIID(pguidCmdGroup, &CGID_Explorer) &&
 	   (nCmdID == 0x29) &&
 	   (nCmdexecopt == 4) && pvaOut)
diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c
index bfb6870..271f9bc 100644
--- a/dlls/shell32/tests/shlview.c
+++ b/dlls/shell32/tests/shlview.c
@@ -1100,6 +1100,49 @@ static void test_GetSetCurrentViewMode(void)
     IShellFolder_Release(desktop);
 }
 
+static void test_IOleCommandTarget(void)
+{
+    IShellFolder *psf_desktop;
+    IShellView *psv;
+    IOleCommandTarget *poct;
+    HRESULT hr;
+
+    hr = SHGetDesktopFolder(&psf_desktop);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+
+    hr = IShellFolder_CreateViewObject(psf_desktop, NULL, &IID_IShellView, (void**)&psv);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+    if(SUCCEEDED(hr))
+    {
+        hr = IShellView_QueryInterface(psv, &IID_IOleCommandTarget, (void**)&poct);
+        ok(hr == S_OK || broken(hr == E_NOINTERFACE) /* Win95/NT4 */, "Got 0x%08x\n", hr);
+        if(SUCCEEDED(hr))
+        {
+            OLECMD oc;
+
+            hr = IOleCommandTarget_QueryStatus(poct, NULL, 0, NULL, NULL);
+            ok(hr == E_INVALIDARG, "Got 0x%08x\n", hr);
+
+            oc.cmdID = 1;
+            hr = IOleCommandTarget_QueryStatus(poct, NULL, 0, &oc, NULL);
+            ok(hr == OLECMDERR_E_UNKNOWNGROUP, "Got 0x%08x\n", hr);
+
+            oc.cmdID = 1;
+            hr = IOleCommandTarget_QueryStatus(poct, NULL, 1, &oc, NULL);
+            ok(hr == OLECMDERR_E_UNKNOWNGROUP, "Got 0x%08x\n", hr);
+
+            hr = IOleCommandTarget_Exec(poct, NULL, 0, 0, NULL, NULL);
+            ok(hr == OLECMDERR_E_UNKNOWNGROUP, "Got 0x%08x\n", hr);
+
+            IOleCommandTarget_Release(poct);
+        }
+
+        IShellView_Release(psv);
+    }
+
+    IShellFolder_Release(psf_desktop);
+}
+
 START_TEST(shlview)
 {
     OleInitialize(NULL);
@@ -1112,6 +1155,7 @@ START_TEST(shlview)
     test_IShellFolderView();
     test_IOleWindow();
     test_GetSetCurrentViewMode();
+    test_IOleCommandTarget();
 
     OleUninitialize();
 }




More information about the wine-cvs mailing list