[PATCH 0/2] MR10300: jscript: Treat empty string as NULL in GetScriptDispatch
GetScriptDispatch(L"") should return the global dispatch object, same as GetScriptDispatch(NULL). Currently it returns E_INVALIDARG. Fix for both jscript and vbscript. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59504 -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10300
From: Robert Gerigk <Robert-Gerigk@online.de> vbscript/tests: Add test for GetScriptDispatch with empty string. On Windows, GetScriptDispatch(L"") returns the global dispatch object, same as GetScriptDispatch(NULL). Wine currently returns E_INVALIDARG. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59504 --- dlls/jscript/tests/jscript.c | 3 +++ dlls/vbscript/tests/vbscript.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c index 03774dac4f3..fe9bf407fde 100644 --- a/dlls/jscript/tests/jscript.c +++ b/dlls/jscript/tests/jscript.c @@ -1442,6 +1442,9 @@ static void test_named_items(void) CHECK_CALLED(GetItemInfo_global_code); dispex = get_script_dispatch(script, NULL); + dispex2 = get_script_dispatch(script, L""); + ok(dispex == dispex2, "get_script_dispatch(L\"\") returned different dispatch object than NULL.\n"); + IDispatchEx_Release(dispex2); dispex2 = get_script_dispatch(script, L"globalItem"); ok(dispex == dispex2, "get_script_dispatch returned different dispatch objects.\n"); IDispatchEx_Release(dispex2); diff --git a/dlls/vbscript/tests/vbscript.c b/dlls/vbscript/tests/vbscript.c index 68157c9695b..adda087ce76 100644 --- a/dlls/vbscript/tests/vbscript.c +++ b/dlls/vbscript/tests/vbscript.c @@ -1962,6 +1962,9 @@ static void test_named_items(void) CHECK_CALLED(GetItemInfo_global_code); script_disp = get_script_dispatch(script, NULL); + script_disp2 = get_script_dispatch(script, L""); + ok(script_disp == script_disp2, "get_script_dispatch(L\"\") returned different dispatch object than NULL.\n"); + IDispatchEx_Release(script_disp2); script_disp2 = get_script_dispatch(script, L"globalItem"); ok(script_disp == script_disp2, "get_script_dispatch returned different dispatch objects.\n"); IDispatchEx_Release(script_disp2); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10300
From: Robert Gerigk <Robert-Gerigk@online.de> vbscript: Treat empty string as NULL in GetScriptDispatch. On Windows, GetScriptDispatch(L"") returns the global dispatch object, same as GetScriptDispatch(NULL). Wine previously returned E_INVALIDARG because it only checked for NULL, not for an empty string. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59504 --- dlls/jscript/jscript.c | 2 +- dlls/vbscript/vbscript.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 30727a5ab2b..02b157749ce 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -962,7 +962,7 @@ static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR } script_obj = This->ctx->global; - if(pstrItemName) { + if(pstrItemName && *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; diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c index 84a8e0bb97f..715c98d32bb 100644 --- a/dlls/vbscript/vbscript.c +++ b/dlls/vbscript/vbscript.c @@ -859,7 +859,7 @@ static HRESULT WINAPI VBScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR } script_obj = This->ctx->script_obj; - if(pstrItemName) { + if(pstrItemName && *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; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10300
The patch looks good, but we require tests to pass for each commit and they would fail if only the first commit were applied. Please put the test and the fix into the same commit, and have a separate commit for jscript and vbscript instead. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10300#note_131816
participants (3)
-
Jacek Caban (@jacek) -
Jan Robert Gerigk (@RgSg86) -
Robert Gerigk