]> granicus.if.org Git - vim/commitdiff
patch 8.2.3006: crash when echoing a value very early v8.2.3006
authorBram Moolenaar <Bram@vim.org>
Tue, 15 Jun 2021 20:39:11 +0000 (22:39 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 15 Jun 2021 20:39:11 +0000 (22:39 +0200)
Problem:    Crash when echoing a value very early. (Naruhiko Nishino)
Solution:   Do not use a NUL to truncate the message, make a copy.
            (closes #8388)

src/message.c
src/testdir/test_startup.vim
src/version.c

index f2fe23b58239b1be0c3d9bf200029a044f306751..cb713d7210940d4fd597521f4b94c6a1f215bb16 100644 (file)
@@ -2751,19 +2751,21 @@ msg_puts_printf(char_u *str, int maxlen)
 
     if (*p != NUL && !(silent_mode && p_verbose == 0))
     {
-       int c = -1;
+       char_u *tofree = NULL;
 
        if (maxlen > 0 && STRLEN(p) > (size_t)maxlen)
        {
-           c = p[maxlen];
-           p[maxlen] = 0;
+           tofree = vim_strnsave(p, (size_t)maxlen);
+           p = tofree;
+       }
+       if (p != NULL)
+       {
+           if (info_message)
+               mch_msg((char *)p);
+           else
+               mch_errmsg((char *)p);
+           vim_free(tofree);
        }
-       if (info_message)
-           mch_msg((char *)p);
-       else
-           mch_errmsg((char *)p);
-       if (c != -1)
-           p[maxlen] = c;
     }
 
     msg_didout = TRUE;     // assume that line is not empty
index 3cb5a2deb6aaa4a8edd573edcda4e22901209bad..c65b18cc26967a96cedb168a17c48e3ef1633e82 100644 (file)
@@ -1301,4 +1301,18 @@ func Test_write_in_vimrc()
   call delete('Xvimrc')
 endfunc
 
+func Test_echo_true_in_cmd()
+  let lines =<< trim END
+      echo v:true
+      call writefile(['done'], 'Xresult')
+  END
+  call writefile(lines, 'Xscript')
+  if RunVim([], [], '--cmd "source Xscript" --c q')
+    call assert_equal(['done'], readfile('Xresult'))
+  endif
+  call delete('Xscript')
+  call delete('Xresult')
+
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 21f5b53734800746a975cec29af591369132744a..caba20ae3680e39283ca41b4d14a3bb2004effc6 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3006,
 /**/
     3005,
 /**/