diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-06-15 22:39:11 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-06-15 22:39:11 +0200 |
commit | a97c36310f90ed15dbf5a2ba5bf91fc906e2e724 (patch) | |
tree | dde2b162d72a2925f7cc90863a9bd324a55b0b36 | |
parent | f57b43c230c23117650c956c1f62546a34500fb6 (diff) | |
download | vim-git-a97c36310f90ed15dbf5a2ba5bf91fc906e2e724.tar.gz |
patch 8.2.3006: crash when echoing a value very earlyv8.2.3006
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)
-rw-r--r-- | src/message.c | 20 | ||||
-rw-r--r-- | src/testdir/test_startup.vim | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 27 insertions, 9 deletions
diff --git a/src/message.c b/src/message.c index f2fe23b58..cb713d721 100644 --- a/src/message.c +++ b/src/message.c @@ -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 diff --git a/src/testdir/test_startup.vim b/src/testdir/test_startup.vim index 3cb5a2deb..c65b18cc2 100644 --- a/src/testdir/test_startup.vim +++ b/src/testdir/test_startup.vim @@ -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 diff --git a/src/version.c b/src/version.c index 21f5b5373..caba20ae3 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3006, +/**/ 3005, /**/ 3004, |