From: Francis De Brabandere <francisdb@gmail.com> --- dlls/vbscript/global.c | 13 +++++++++++++ dlls/vbscript/tests/api.vbs | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 965a6233bc2..8315ec6f17b 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -2761,6 +2761,18 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, start = 0; len = SysStringLen(string); + + if(!len) { + bounds.lLbound = 0; + bounds.cElements = 0; + sa = SafeArrayCreate(VT_VARIANT, 1, &bounds); + if(!sa) { + hres = E_OUTOFMEMORY; + goto error; + } + goto done; + } + count = 0; indices = malloc( indices_max * sizeof(int)); @@ -2823,6 +2835,7 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, } SafeArrayUnaccessData(sa); +done: error: if(SUCCEEDED(hres) && res) { V_VT(res) = VT_ARRAY|VT_VARIANT; diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 319ef90e70f..e18d887306b 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -830,6 +830,10 @@ Call ok(x(2) = "def", "Split(""abc--def"",""-"")(2)=" & x(2)) x = Split("abcdefghi","def") Call ok(x(0) = "abc", "Split(""abcdefghi"",""def"")(0)=" & x(0)) Call ok(x(1) = "ghi", "Split(""abcdefghi"",""def"")(1)=" & x(1)) +x = Split("", ",") +Call ok(UBound(x) = -1, "UBound(Split("""","",""))=" & UBound(x)) +x = Split("") +Call ok(UBound(x) = -1, "UBound(Split(""""))=" & UBound(x)) x = Split("12345",3) Call ok(x(0) = "12", "Split(""12345"",3)(0)=" & x(0)) Call ok(x(1) = "45", "Split(""12345"",3)(1)=" & x(1)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10309