Nikolay Sivov : vbscript: Handle negative argument in Space().

Alexandre Julliard julliard at winehq.org
Mon May 23 15:51:52 CDT 2022


Module: wine
Branch: master
Commit: c56d09722ee394658a635c37994fff60b8899598
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c56d09722ee394658a635c37994fff60b8899598

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon May 23 09:10:30 2022 +0300

vbscript: Handle negative argument in Space().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vbscript/global.c      | 11 +++++++----
 dlls/vbscript/tests/api.vbs | 15 +++++++++++++++
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index 15c0bb0958e..80348a5288f 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -1586,14 +1586,17 @@ static HRESULT Global_Space(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt,
 
     TRACE("%s\n", debugstr_variant(arg));
 
+    assert(args_cnt == 1);
+
+    if(V_VT(arg) == VT_NULL)
+        return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);
+
     hres = to_int(arg, &n);
     if(FAILED(hres))
         return hres;
 
-    if(n < 0) {
-        FIXME("n = %d\n", n);
-        return E_NOTIMPL;
-    }
+    if(n < 0)
+        return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL);
 
     if(!res)
         return S_OK;
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 3b67e920c3d..617589053c6 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -747,6 +747,21 @@ Call ok(Space(4.5) = "    ", "Space(4.5) = " & Space(4.5) & """")
 Call ok(Space(0.5) = "", "Space(0.5) = " & Space(0.5) & """")
 Call ok(Space(1.5) = "  ", "Space(1.5) = " & Space(1.5) & """")
 Call ok(Space("1") = " ", "Space(""1"") = " & Space("1") & """")
+Call ok(Space(Empty) = "", "Space(Empty) = " & Space(Empty) & """")
+
+sub testSpaceError()
+    on error resume next
+    call Err.clear()
+    call Space(-1)
+    call ok(Err.number = 5, "Err.number = " & Err.number)
+    call Err.clear()
+    call Space("-1")
+    call ok(Err.number = 5, "Err.number = " & Err.number)
+    call Err.clear()
+    call Space(Null)
+    call ok(Err.number = 94, "Err.number = " & Err.number)
+end sub
+call testSpaceError()
 
 sub test_string(cnt, char, exp)
     call ok(String(cnt, char) = exp, "String(" & cnt & ", """ & char & """ = """ & _




More information about the wine-cvs mailing list