From: Francis De Brabandere <francisdb@gmail.com> --- dlls/vbscript/global.c | 18 ++++++++++++++++++ dlls/vbscript/tests/api.vbs | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index ac7e707a041..b37b5456011 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -2405,6 +2405,9 @@ static HRESULT Global_Day(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wDay); } @@ -2416,6 +2419,9 @@ static HRESULT Global_Month(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wMonth); } @@ -2473,6 +2479,9 @@ static HRESULT Global_Year(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, V TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wYear); } @@ -2484,6 +2493,9 @@ static HRESULT Global_Hour(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, V TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wHour); } @@ -2495,6 +2507,9 @@ static HRESULT Global_Minute(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wMinute); } @@ -2506,6 +2521,9 @@ static HRESULT Global_Second(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, TRACE("(%s)\n", debugstr_variant(arg)); + if (V_VT(arg) == VT_NULL) + return return_null(res); + hres = to_system_time(This->ctx->lcid, arg, &st); return FAILED(hres) ? hres : return_short(res, st.wSecond); } diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 9917997a9aa..e7b06814f9a 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -2079,6 +2079,13 @@ Call ok(Minute(2.02083) = 30, "Minute(2.02083) = " & Minute(2.02083)) Call ok(getVT(Second(now)) = "VT_I2", "getVT(Second(now)) = " & getVT(Second(now))) Call ok(Second(2) = 0, "Second(2) = " & Second(2)) +Call ok(getVT(Day(Null)) = "VT_NULL", "getVT(Day(Null)) = " & getVT(Day(Null))) +Call ok(getVT(Month(Null)) = "VT_NULL", "getVT(Month(Null)) = " & getVT(Month(Null))) +Call ok(getVT(Year(Null)) = "VT_NULL", "getVT(Year(Null)) = " & getVT(Year(Null))) +Call ok(getVT(Hour(Null)) = "VT_NULL", "getVT(Hour(Null)) = " & getVT(Hour(Null))) +Call ok(getVT(Minute(Null)) = "VT_NULL", "getVT(Minute(Null)) = " & getVT(Minute(Null))) +Call ok(getVT(Second(Null)) = "VT_NULL", "getVT(Second(Null)) = " & getVT(Second(Null))) + Sub testRGBError(arg1, arg2, arg3, error_num) on error resume next Dim x -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10821