]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1444: crash when passing NULL to setcmdline() v9.0.1444
authorzeertzjq <zeertzjq@outlook.com>
Wed, 12 Apr 2023 15:21:14 +0000 (16:21 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Apr 2023 15:21:14 +0000 (16:21 +0100)
Problem:    Crash when passing NULL to setcmdline(). (Andreas Louv)
Solution:   Use tv_get_string() instead of using v_string directly.
            (closes #12231, closes #12227)

src/ex_getln.c
src/testdir/test_cmdline.vim
src/version.c

index dc933d745fe6d0132aff92d828b0dc0123f5f604..36d148e79de8f84ac914e0ad592554f98c1878ff 100644 (file)
@@ -4294,7 +4294,8 @@ f_setcmdline(typval_T *argvars, typval_T *rettv)
        }
     }
 
-    rettv->vval.v_number = set_cmdline_str(argvars[0].vval.v_string, pos);
+    // Use tv_get_string() to handle a NULL string like an empty string.
+    rettv->vval.v_number = set_cmdline_str(tv_get_string(&argvars[0]), pos);
 }
 
 /*
index ddcb26045115967ce1f9b932eb3405e9ed78a15a..8b47d86e1c1ca648737c9b03e2e2b7e18df3c980 100644 (file)
@@ -3393,6 +3393,14 @@ endfunc
 
 func Test_setcmdline()
   func SetText(text, pos)
+    call assert_equal(0, setcmdline(test_null_string()))
+    call assert_equal('', getcmdline())
+    call assert_equal(1, getcmdpos())
+
+    call assert_equal(0, setcmdline(''[: -1]))
+    call assert_equal('', getcmdline())
+    call assert_equal(1, getcmdpos())
+
     autocmd CmdlineChanged * let g:cmdtype = expand('<afile>')
     call assert_equal(0, setcmdline(a:text))
     call assert_equal(a:text, getcmdline())
index eba3db43c3515b34ccac6d37238193ea0013a36d..b5df8c5160421f75c271783abaf249539a92c2e8 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1444,
 /**/
     1443,
 /**/