[PATCH 0/1] MR10400: vbscript: Map DISP_E_DIVBYZERO to VBScript error 11.
Add the missing DISP_E_DIVBYZERO mapping in map_vbs_exception() so that division by zero errors report Err.Number = 11 with the correct description "Division by zero", matching native behavior. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42400 -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10400
From: Francis De Brabandere <francisdb@gmail.com> Add the missing DISP_E_DIVBYZERO mapping in map_vbs_exception() so that division by zero errors report Err.Number = 11 with the correct description "Division by zero", matching native behavior. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42400 --- dlls/vbscript/tests/error.vbs | 14 ++++++++++++++ dlls/vbscript/vbdisp.c | 1 + dlls/vbscript/vbscript.rc | 1 + dlls/vbscript/vbscript_defs.h | 1 + 4 files changed, 17 insertions(+) diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs index 40dde515f87..f7673be1c25 100644 --- a/dlls/vbscript/tests/error.vbs +++ b/dlls/vbscript/tests/error.vbs @@ -39,6 +39,7 @@ const DISP_E_ARRAYISLOCKED = &h8002000D& const DISP_E_BADPARAMCOUNT = &h8002000E& const DISP_E_PARAMNOTOPTIONAL = &h8002000F& const DISP_E_NOTACOLLECTION = &h80020011& +const DISP_E_DIVBYZERO = &h80020012& const TYPE_E_DLLFUNCTIONNOTFOUND = &h8002802F& const TYPE_E_TYPEMISMATCH = &h80028CA0& const TYPE_E_OUTOFBOUNDS = &h80028CA1& @@ -405,6 +406,7 @@ testHresMap DISP_E_UNKNOWNNAME, 438 testHresMap DISP_E_NONAMEDARGS, 446 testHresMap DISP_E_BADVARTYPE, 458 testHresMap DISP_E_OVERFLOW, 6 +testHresMap DISP_E_DIVBYZERO, 11 testHresMap DISP_E_BADINDEX, 9 testHresMap DISP_E_UNKNOWNLCID, 447 testHresMap DISP_E_ARRAYISLOCKED, 10 @@ -460,6 +462,18 @@ end sub call testVBErrorCodes +sub testDivisionByZero() + on error resume next + dim x + + Err.Clear() + x = 1 / 0 + call ok(Err.Number = 11, "division by zero Err.Number = " & Err.Number) + call ok(Err.Description = "Division by zero", "division by zero Err.Description = " & Err.Description) +end sub + +call testDivisionByZero + on error resume next throwWithDesc diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c index 0ede0cfd6ba..e61c68842a1 100644 --- a/dlls/vbscript/vbdisp.c +++ b/dlls/vbscript/vbdisp.c @@ -1621,6 +1621,7 @@ void map_vbs_exception(EXCEPINFO *ei) case DISP_E_NONAMEDARGS: vbse_number = VBSE_NAMED_ARGS_NOT_SUPPORTED; break; case DISP_E_BADVARTYPE: vbse_number = VBSE_INVALID_TYPELIB_VARIABLE; break; case DISP_E_OVERFLOW: vbse_number = VBSE_OVERFLOW; break; + case DISP_E_DIVBYZERO: vbse_number = VBSE_DIVISION_BY_ZERO; break; case DISP_E_BADINDEX: vbse_number = VBSE_OUT_OF_BOUNDS; break; case DISP_E_UNKNOWNLCID: vbse_number = VBSE_LOCALE_SETTING_NOT_SUPPORTED; break; case DISP_E_ARRAYISLOCKED: vbse_number = VBSE_ARRAY_LOCKED; break; diff --git a/dlls/vbscript/vbscript.rc b/dlls/vbscript/vbscript.rc index 96b1f41a9a2..b9a1c3ad5c3 100644 --- a/dlls/vbscript/vbscript.rc +++ b/dlls/vbscript/vbscript.rc @@ -30,6 +30,7 @@ STRINGTABLE VBSE_OUT_OF_MEMORY "Out of memory" VBSE_OUT_OF_BOUNDS "Subscript out of range" VBSE_ARRAY_LOCKED "This array is fixed or temporarily locked" + VBSE_DIVISION_BY_ZERO "Division by zero" VBSE_TYPE_MISMATCH "Type mismatch" VBSE_FILE_NOT_FOUND "File not found" VBSE_IO_ERROR "Device I/O error" diff --git a/dlls/vbscript/vbscript_defs.h b/dlls/vbscript/vbscript_defs.h index 19c71b62975..e0e9d1cac94 100644 --- a/dlls/vbscript/vbscript_defs.h +++ b/dlls/vbscript/vbscript_defs.h @@ -241,6 +241,7 @@ #define VBSE_OUT_OF_MEMORY 7 #define VBSE_OUT_OF_BOUNDS 9 #define VBSE_ARRAY_LOCKED 10 +#define VBSE_DIVISION_BY_ZERO 11 #define VBSE_TYPE_MISMATCH 13 #define VBSE_FILE_NOT_FOUND 53 #define VBSE_IO_ERROR 57 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10400
participants (2)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb)