[PATCH 0/2] MR10908: vbscript: Add CDec as a stub builtin that always returns type mismatch.
Native cscript recognises CDec as a builtin but rejects every input with err 13 (Type mismatch), even valid numeric arguments. Match that: register CDec in the global table and return MAKE_VBSERROR(VBSE_TYPE_MISMATCH) unconditionally. Previously Wine had no CDec at all, so any call raised err 500 (Variable is undefined). -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10908
From: Francis De Brabandere <francisdb@gmail.com> --- dlls/vbscript/tests/lang.vbs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index 1b6cdf763e4..81f9caea54c 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -4248,6 +4248,17 @@ Dim nullResult nullResult = CLng(Null) todo_wine_ok Err.Number = 94, "CLng(Null): err.number = " & Err.Number +' CDec is a recognised builtin but native always raises type mismatch. +Sub testCDecStub + on error resume next + Err.Clear : call CDec(0) : todo_wine_ok Err.Number = 13, "CDec(0) err=" & Err.Number + Err.Clear : call CDec(1.5) : todo_wine_ok Err.Number = 13, "CDec(1.5) err=" & Err.Number + Err.Clear : call CDec("1.5") : todo_wine_ok Err.Number = 13, "CDec(""1.5"") err=" & Err.Number + Err.Clear : call CDec(Null) : todo_wine_ok Err.Number = 13, "CDec(Null) err=" & Err.Number + Err.Clear : call CDec(Empty) : todo_wine_ok Err.Number = 13, "CDec(Empty) err=" & Err.Number +End Sub +Call testCDecStub + ' Error 429: ActiveX component can't create object Err.Clear Dim badObj -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10908
From: Francis De Brabandere <francisdb@gmail.com> Native cscript recognises CDec as a builtin but rejects every input with err 13 (Type mismatch), even valid numeric arguments. Match that: register CDec in the global table and return MAKE_VBSERROR(VBSE_TYPE_MISMATCH) unconditionally. Previously Wine had no CDec at all, so any call raised err 500 (Variable is undefined). --- dlls/vbscript/global.c | 9 +++++++++ dlls/vbscript/tests/lang.vbs | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index bd949f7b370..253e0c0fdac 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -783,6 +783,14 @@ static HRESULT Global_CDate(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, return S_OK; } +static HRESULT Global_CDec(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) +{ + TRACE("%s\n", debugstr_variant(arg)); + assert(args_cnt == 1); + /* Native cscript stubs CDec: every input returns type mismatch. */ + return MAKE_VBSERROR(VBSE_TYPE_MISMATCH); +} + static HRESULT Global_CDbl(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { VARIANT v; @@ -4735,6 +4743,7 @@ static const builtin_prop_t global_props[] = { {L"CCur", Global_CCur, 0, 1}, {L"CDate", Global_CDate, 0, 1}, {L"CDbl", Global_CDbl, 0, 1}, + {L"CDec", Global_CDec, 0, 1}, {L"Chr", Global_Chr, 0, 1}, {L"ChrB", Global_ChrB, 0, 1}, {L"ChrW", Global_ChrW, 0, 1}, diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index 81f9caea54c..eee165c6b58 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -4251,11 +4251,11 @@ todo_wine_ok Err.Number = 94, "CLng(Null): err.number = " & Err.Number ' CDec is a recognised builtin but native always raises type mismatch. Sub testCDecStub on error resume next - Err.Clear : call CDec(0) : todo_wine_ok Err.Number = 13, "CDec(0) err=" & Err.Number - Err.Clear : call CDec(1.5) : todo_wine_ok Err.Number = 13, "CDec(1.5) err=" & Err.Number - Err.Clear : call CDec("1.5") : todo_wine_ok Err.Number = 13, "CDec(""1.5"") err=" & Err.Number - Err.Clear : call CDec(Null) : todo_wine_ok Err.Number = 13, "CDec(Null) err=" & Err.Number - Err.Clear : call CDec(Empty) : todo_wine_ok Err.Number = 13, "CDec(Empty) err=" & Err.Number + Err.Clear : call CDec(0) : call ok(Err.Number = 13, "CDec(0) err=" & Err.Number) + Err.Clear : call CDec(1.5) : call ok(Err.Number = 13, "CDec(1.5) err=" & Err.Number) + Err.Clear : call CDec("1.5") : call ok(Err.Number = 13, "CDec(""1.5"") err=" & Err.Number) + Err.Clear : call CDec(Null) : call ok(Err.Number = 13, "CDec(Null) err=" & Err.Number) + Err.Clear : call CDec(Empty) : call ok(Err.Number = 13, "CDec(Empty) err=" & Err.Number) End Sub Call testCDecStub -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10908
participants (2)
-
Francis De Brabandere -
Francis De Brabandere (@francisdb)