[PATCH 0/1] MR10376: vbscript: Return "Object required" error for non-dispatch types.
Return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED) (error 424) instead of E_FAIL in stack_assume_disp() when the value is not a dispatch object. This fixes the error code reported for member access on non-object values, such as using .prop inside a With block when the expression is not an object. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10376
From: Francis De Brabandere <francisdb@gmail.com> Return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED) (error 424) instead of E_FAIL in stack_assume_disp() when the value is not a dispatch object. This fixes the error code reported for member access on non-object values, such as using .prop inside a With block when the expression is not an object. --- dlls/vbscript/interp.c | 6 ++---- dlls/vbscript/tests/error.vbs | 4 ++-- dlls/vbscript/vbscript.rc | 1 + dlls/vbscript/vbscript_defs.h | 1 + 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 127fcc2c05e..03944c70078 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -472,14 +472,12 @@ static HRESULT stack_assume_disp(exec_ctx_t *ctx, unsigned n, IDispatch **disp) if(V_VT(v) != VT_DISPATCH && (disp || V_VT(v) != VT_UNKNOWN)) { if(V_VT(v) != (VT_VARIANT|VT_BYREF)) { - FIXME("not supported type: %s\n", debugstr_variant(v)); - return E_FAIL; + return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED); } ref = V_VARIANTREF(v); if(V_VT(ref) != VT_DISPATCH && (disp || V_VT(ref) != VT_UNKNOWN)) { - FIXME("not disp %s\n", debugstr_variant(ref)); - return E_FAIL; + return MAKE_VBSERROR(VBSE_OBJECT_REQUIRED); } V_VT(v) = V_VT(ref); diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs index 9b74dc8773e..38a872ff943 100644 --- a/dlls/vbscript/tests/error.vbs +++ b/dlls/vbscript/tests/error.vbs @@ -340,7 +340,7 @@ sub testWithError() with throwInt(E_TESTERROR) x = true .prop = 1 - todo_wine_ok Err.Number = 424, "Err.Number = " & Err.Number + ok Err.Number = 424, "Err.Number = " & Err.Number end with ok x, "with statement body not executed" @@ -348,7 +348,7 @@ sub testWithError() x = false with empty .prop = 1 - todo_wine_ok Err.Number = 424, "Err.Number = " & Err.Number + ok Err.Number = 424, "Err.Number = " & Err.Number x = true end with ok x, "with statement body not executed" diff --git a/dlls/vbscript/vbscript.rc b/dlls/vbscript/vbscript.rc index cf157f77526..96b1f41a9a2 100644 --- a/dlls/vbscript/vbscript.rc +++ b/dlls/vbscript/vbscript.rc @@ -42,6 +42,7 @@ STRINGTABLE VBSE_OBJECT_VARIABLE_NOT_SET "Object variable not set" VBSE_ILLEGAL_NULL_USE "Invalid use of Null" VBSE_CANT_CREATE_TMP_FILE "Can't create necessary temporary file" + VBSE_OBJECT_REQUIRED "Object required" VBSE_CANT_CREATE_OBJECT "ActiveX component can't create object" VBSE_OLE_NOT_SUPPORTED "Class doesn't support Automation" VBSE_OLE_FILE_NOT_FOUND "File name or class name not found during Automation operation" diff --git a/dlls/vbscript/vbscript_defs.h b/dlls/vbscript/vbscript_defs.h index 139b71255a0..19c71b62975 100644 --- a/dlls/vbscript/vbscript_defs.h +++ b/dlls/vbscript/vbscript_defs.h @@ -253,6 +253,7 @@ #define VBSE_OBJECT_VARIABLE_NOT_SET 91 #define VBSE_ILLEGAL_NULL_USE 94 #define VBSE_CANT_CREATE_TMP_FILE 322 +#define VBSE_OBJECT_REQUIRED 424 #define VBSE_CANT_CREATE_OBJECT 429 #define VBSE_OLE_NOT_SUPPORTED 430 #define VBSE_OLE_FILE_NOT_FOUND 432 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10376
This merge request was approved by Jacek Caban. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10376
participants (3)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb) -
Jacek Caban (@jacek)