Gabriel Ivăncescu : jscript: Retrieve the proper script dispatch from the named item in GetScriptDispatch.

Alexandre Julliard julliard at winehq.org
Mon Mar 9 17:42:36 CDT 2020


Module: wine
Branch: master
Commit: 335e0073c58ef2453dbd817e3ba08c4c2e18da63
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=335e0073c58ef2453dbd817e3ba08c4c2e18da63

Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date:   Sat Mar  7 15:40:33 2020 +0200

jscript: Retrieve the proper script dispatch from the named item in GetScriptDispatch.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/jscript/jscript.c       | 10 +++++++++-
 dlls/jscript/tests/jscript.c |  5 +++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index 6281b20548..aabad7ef8b 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -883,6 +883,7 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR
                                                 IDispatch **ppdisp)
 {
     JScript *This = impl_from_IActiveScript(iface);
+    jsdisp_t *script_obj;
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp);
 
@@ -894,7 +895,14 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR
         return E_UNEXPECTED;
     }
 
-    *ppdisp = to_disp(This->ctx->global);
+    script_obj = This->ctx->global;
+    if(pstrItemName) {
+        named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0);
+        if(!item) return E_INVALIDARG;
+        if(item->script_obj) script_obj = item->script_obj;
+    }
+
+    *ppdisp = to_disp(script_obj);
     IDispatch_AddRef(*ppdisp);
     return S_OK;
 }
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index 56b8cffb21..be1320fa62 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -1183,6 +1183,11 @@ static void test_named_items(void)
     ok(visible_named_item_ref == 0, "visible_named_item_ref = %u\n", visible_named_item_ref);
     ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %u\n", visible_code_named_item_ref);
 
+    hr = IActiveScript_GetScriptDispatch(script, L"noContext", &disp);
+    ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08x\n", hr);
+    hr = IActiveScript_GetScriptDispatch(script, L"codeONLYItem", &disp);
+    ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08x\n", hr);
+
     SET_EXPECT(GetItemInfo_global_code);
     hr = IActiveScript_AddNamedItem(script, L"globalCodeItem", SCRIPTITEM_GLOBALMEMBERS | SCRIPTITEM_CODEONLY);
     ok(hr == S_OK, "AddNamedItem failed: %08x\n", hr);




More information about the wine-cvs mailing list