mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -04:00
patch 8.2.3006: crash when echoing a value very early
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)
This commit is contained in:
parent
f57b43c230
commit
a97c36310f
@ -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
|
||||
|
@ -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
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3006,
|
||||
/**/
|
||||
3005,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user