]> granicus.if.org Git - vim/commitdiff
patch 8.2.2887: crash when passing null string to fullcommand() v8.2.2887
authorBram Moolenaar <Bram@vim.org>
Wed, 26 May 2021 17:49:09 +0000 (19:49 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 26 May 2021 17:49:09 +0000 (19:49 +0200)
Problem:    Crash when passing null string to fullcommand().
Solution:   Check for NULL pointer. (closes #8256)

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

index 2738f4f4d18e56ff74773b2e070e9fb16da37987..b52629ed1c079328f805fed6e2891e98176b3784 100644 (file)
@@ -3791,12 +3791,15 @@ f_fullcommand(typval_T *argvars, typval_T *rettv)
     char_u   *name = argvars[0].vval.v_string;
     char_u   *p;
 
-    while (name[0] != NUL && name[0] == ':')
+    rettv->v_type = VAR_STRING;
+    rettv->vval.v_string = NULL;
+    if (name == NULL)
+       return;
+
+    while (*name != NUL && *name == ':')
        name++;
     name = skip_range(name, TRUE, NULL);
 
-    rettv->v_type = VAR_STRING;
-
     ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name;
     ea.cmdidx = (cmdidx_T)0;
     p = find_ex_command(&ea, NULL, NULL, NULL);
index d167d4c7c5a2b34380501e5cdfd267be8028ac8a..c3a638ba11b212a42ffc3ddf3baf619f40152675 100644 (file)
@@ -475,6 +475,7 @@ func Test_fullcommand()
   for [in, want] in items(tests)
     call assert_equal(want, fullcommand(in))
   endfor
+  call assert_equal('', fullcommand(test_null_string()))
 
   call assert_equal('syntax', 'syn'->fullcommand())
 endfunc
index 4eced11fdb5b6bbf27a787ec84c428d31c75d113..a6ab4cfc8d9e04e7099d5297fc0353a806c56d56 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2887,
 /**/
     2886,
 /**/