]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1524: passing -1 for bool is not always rejected v9.0.1524
authorzeertzjq <zeertzjq@outlook.com>
Mon, 8 May 2023 14:31:38 +0000 (15:31 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 8 May 2023 14:31:38 +0000 (15:31 +0100)
Problem:    Passing -1 for bool is not always rejected.
Solution:   Check for error in a better way. (closes #12358)

src/strings.c
src/testdir/test_expr.vim
src/testdir/test_functions.vim
src/testdir/test_utf8.vim
src/version.c

index e16b74262b4e1b40e82cb98707367ccb90845268..5aa7152bbd3883c2e6fdbd90b90b8146c0017696 100644 (file)
@@ -1065,11 +1065,13 @@ byteidx_common(typval_T *argvars, typval_T *rettv, int comp UNUSED)
     varnumber_T        utf16idx = FALSE;
     if (argvars[2].v_type != VAR_UNKNOWN)
     {
-       utf16idx = tv_get_bool(&argvars[2]);
+       int error = FALSE;
+       utf16idx = tv_get_bool_chk(&argvars[2], &error);
+       if (error)
+           return;
        if (utf16idx < 0 || utf16idx > 1)
        {
-           if (utf16idx != -1)
-               semsg(_(e_using_number_as_bool_nr), utf16idx);
+           semsg(_(e_using_number_as_bool_nr), utf16idx);
            return;
        }
     }
@@ -1421,14 +1423,19 @@ f_strchars(typval_T *argvars, typval_T *rettv)
        return;
 
     if (argvars[1].v_type != VAR_UNKNOWN)
-       skipcc = tv_get_bool(&argvars[1]);
-    if (skipcc < 0 || skipcc > 1)
     {
-       if (skipcc != -1)
+       int error = FALSE;
+       skipcc = tv_get_bool_chk(&argvars[1], &error);
+       if (error)
+           return;
+       if (skipcc < 0 || skipcc > 1)
+       {
            semsg(_(e_using_number_as_bool_nr), skipcc);
+           return;
+       }
     }
-    else
-       strchar_common(argvars, rettv, skipcc);
+
+    strchar_common(argvars, rettv, skipcc);
 }
 
 /*
@@ -1533,11 +1540,12 @@ f_strcharpart(typval_T *argvars, typval_T *rettv)
        if (argvars[2].v_type != VAR_UNKNOWN
                                           && argvars[3].v_type != VAR_UNKNOWN)
        {
-           skipcc = tv_get_bool(&argvars[3]);
+           skipcc = tv_get_bool_chk(&argvars[3], &error);
+           if (error)
+               return;
            if (skipcc < 0 || skipcc > 1)
            {
-               if (skipcc != -1)
-                   semsg(_(e_using_number_as_bool_nr), skipcc);
+               semsg(_(e_using_number_as_bool_nr), skipcc);
                return;
            }
        }
index b3a8c49c54de318fa674514d44a11fa14c8ba7bb..68cbeb59d0306ee9bb2b607425a75a31cae66e95 100644 (file)
@@ -161,7 +161,8 @@ func Test_strcharpart()
   END
   call v9.CheckLegacyAndVim9Success(lines)
 
-  call assert_fails('echo strcharpart("", 0, 0, {})', ['E728:', 'E728:'])
+  call assert_fails('call strcharpart("", 0, 0, {})', ['E728:', 'E728:'])
+  call assert_fails('call strcharpart("", 0, 0, -1)', ['E1023:', 'E1023:'])
 endfunc
 
 func Test_getreg_empty_list()
index f05ac15ed5909ab0a5e7494787c569a94ae3fd2d..4529a5e8d5fb6ad66c06c3bc9a8350093668266c 100644 (file)
@@ -1225,6 +1225,7 @@ func Test_byteidx()
   call assert_fails("call byteidx([], 0)", 'E730:')
   call assert_fails("call byteidx('abc', [])", 'E745:')
   call assert_fails("call byteidx('abc', 0, {})", ['E728:', 'E728:'])
+  call assert_fails("call byteidx('abc', 0, -1)", ['E1023:', 'E1023:'])
 endfunc
 
 " Test for byteidxcomp() using a character index
@@ -1265,6 +1266,7 @@ func Test_byteidxcomp()
   call assert_fails("call byteidxcomp([], 0)", 'E730:')
   call assert_fails("call byteidxcomp('abc', [])", 'E745:')
   call assert_fails("call byteidxcomp('abc', 0, {})", ['E728:', 'E728:'])
+  call assert_fails("call byteidxcomp('abc', 0, -1)", ['E1023:', 'E1023:'])
 endfunc
 
 " Test for byteidx() using a UTF-16 index
@@ -1625,7 +1627,6 @@ func Test_utf16idx_from_charidx()
   " error cases
   call assert_equal(-1, utf16idx(test_null_string(), 0, v:true, v:true))
   call assert_fails('let l = utf16idx("ab", 0, v:false, [])', 'E1212:')
-  call assert_fails('echo strchars("", {})', ['E728:', 'E728:'])
 endfunc
 
 " Test for strutf16len()
index 16bf60d9e00460bc554e1e6e8ea9bcf946d98e5a..610566fd6504d98ccbaa87ed4881333df2c60ddf 100644 (file)
@@ -29,8 +29,10 @@ func Test_strchars()
     call assert_equal(exp[i], strcharlen(inp[i]))
   endfor
 
-  call assert_fails("let v=strchars('abc', [])", 'E745:')
-  call assert_fails("let v=strchars('abc', 2)", 'E1023:')
+  call assert_fails("call strchars('abc', 2)", ['E1023:', 'E1023:'])
+  call assert_fails("call strchars('abc', -1)", ['E1023:', 'E1023:'])
+  call assert_fails("call strchars('abc', {})", ['E728:', 'E728:'])
+  call assert_fails("call strchars('abc', [])", ['E745:', 'E745:'])
 endfunc
 
 " Test for customlist completion
index 1197ada9118b39e13215a7a02c27732fa441bd9d..4964179a39ec675ad6affb363736b2dcab941c99 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1524,
 /**/
     1523,
 /**/