mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -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))
|
if (*p != NUL && !(silent_mode && p_verbose == 0))
|
||||||
{
|
{
|
||||||
int c = -1;
|
char_u *tofree = NULL;
|
||||||
|
|
||||||
if (maxlen > 0 && STRLEN(p) > (size_t)maxlen)
|
if (maxlen > 0 && STRLEN(p) > (size_t)maxlen)
|
||||||
{
|
{
|
||||||
c = p[maxlen];
|
tofree = vim_strnsave(p, (size_t)maxlen);
|
||||||
p[maxlen] = 0;
|
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
|
msg_didout = TRUE; // assume that line is not empty
|
||||||
|
@ -1301,4 +1301,18 @@ func Test_write_in_vimrc()
|
|||||||
call delete('Xvimrc')
|
call delete('Xvimrc')
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3006,
|
||||||
/**/
|
/**/
|
||||||
3005,
|
3005,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user