[PATCH v3 0/1] MR10400: Draft: 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 -- v3: vbscript: Map DISP_E_DIVBYZERO to VBScript error 11. 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 | 20 ++++++++++++++++++++ dlls/vbscript/vbdisp.c | 1 + dlls/vbscript/vbscript.rc | 1 + dlls/vbscript/vbscript_defs.h | 1 + 4 files changed, 23 insertions(+) diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs index 40dde515f87..ccb1faeae46 100644 --- a/dlls/vbscript/tests/error.vbs +++ b/dlls/vbscript/tests/error.vbs @@ -460,6 +460,26 @@ end sub call testVBErrorCodes +sub testDivisionByZero() + on error resume next + dim x + + Err.Clear() + x = 1 / 0 + call ok(Err.Number = 11, "1 / 0 Err.Number = " & Err.Number) + call ok(Err.Description = "Division by zero", "1 / 0 Err.Description = " & Err.Description) + + Err.Clear() + x = 1 \ 0 + call ok(Err.Number = 11, "1 \ 0 Err.Number = " & Err.Number) + + Err.Clear() + x = 1 Mod 0 + call ok(Err.Number = 11, "1 Mod 0 Err.Number = " & Err.Number) +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
On Fri Mar 20 13:39:52 2026 +0000, Francis De Brabandere wrote:
changed this line in [version 3 of the diff](/wine/wine/-/merge_requests/10400/diffs?diff_id=252654&start_sha=a09917d16a843395d5528776e7adc536d9acf320#19b309798e74fb8c8af366e0c6cc686d79a38532_2250_2249) Hmm, I thought I tried that and something failed, but could be a mix-up of the other MR's I am working on. Moved to the correct location.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/10400#note_133019
This merge request was approved by Jacek Caban. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10400
participants (3)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb) -
Jacek Caban (@jacek)