Fixes https://bugs.winehq.org/show_bug.cgi?id=57563
-- v2: forgot test
From: Francis De Brabandere francisdb@gmail.com
--- dlls/vbscript/global.c | 9 ++++++--- dlls/vbscript/tests/api.vbs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 058ddabcde1..109a20a3ac3 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -1404,9 +1404,6 @@ static HRESULT Global_Mid(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, V
assert(args_cnt == 2 || args_cnt == 3);
- if(V_VT(args) == VT_EMPTY) - return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL); - if(V_VT(args+1) == VT_NULL || (args_cnt == 3 && V_VT(args+2) == VT_NULL)) return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);
@@ -1432,6 +1429,12 @@ static HRESULT Global_Mid(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, V return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL); }
+ if(V_VT(args) == VT_EMPTY) + return return_string(res, L""); + + if(V_VT(args) == VT_NULL) + return return_null(res); + if(V_VT(args) == VT_BSTR) { str = V_BSTR(args); }else { diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 7b8744f4c74..6375f2ae620 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -632,6 +632,16 @@ Sub TestMid2(str, start, ex) Call ok(x = ex, "Mid(" & str & ", " & start & ") = " & x & " expected " & ex) End Sub
+Sub TestMidNull(str, start, len) + x = Mid(str, start, len) + Call ok(IsNull(x), "Mid(" & str & ", " & start & ", " & len & ") = " & x & " expected Null") +End Sub + +Sub TestMidNull2(str, start) + x = Mid(str, start) + Call ok(IsNull(x), "Mid(" & str & ", " & start & ") = " & x & " expected Null") +End Sub + TestMid "test", 2, 2, "es" TestMid "test", 2, 4, "est" TestMid "test", 1, 2, "te" @@ -640,11 +650,15 @@ TestMid "test", 1, 0, "" TestMid "test", 5, 2, "" TestMid 1234, 1, 2, "12" TestMid 1234, 5, 2, "" +TestMid empty, 5, 2, "" TestMid2 "test", 1, "test" TestMid2 "test", 2, "est" TestMid2 "test", 4, "t" TestMid2 "test", 5, "" TestMid2 1234, 5, "" +TestMid2 empty, 5, "" +TestMidNull null, 5, 2 +TestMidNull2 null, 5
sub TestMidError() on error resume next
From: Francis De Brabandere francisdb@gmail.com
--- dlls/vbscript/tests/api.vbs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 6375f2ae620..893c3569e43 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -671,6 +671,7 @@ sub TestMidError() call Err.clear() call Mid("test", "a", empty) call ok(Err.number = 13, "Err.number = " & Err.number) + call Err.clear() call Mid("test", 0, -1) call ok(Err.number = 5, "Err.number = " & Err.number) call Err.clear() @@ -701,8 +702,6 @@ sub TestMidError() call Mid("test", 0, empty) call ok(Err.number = 5, "Err.number = " & Err.number) call Err.clear() - call Mid(empty, 0, 0) - call ok(Err.number = 5, "Err.number = " & Err.number) end sub call TestMidError()