mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.1959: crash when terminal buffer name is made empty
Problem: Crash when terminal buffer name is made empty. (Dhiraj Mishra) Solution: Fall back to "[No Name]". (closes #7262)
This commit is contained in:
parent
b885b435d1
commit
00806bceb6
13
src/buffer.c
13
src/buffer.c
@ -5648,10 +5648,21 @@ buf_spname(buf_T *buf)
|
||||
}
|
||||
|
||||
if (buf->b_fname == NULL)
|
||||
return (char_u *)_("[No Name]");
|
||||
return buf_get_fname(buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get "buf->b_fname", use "[No Name]" if it is NULL.
|
||||
*/
|
||||
char_u *
|
||||
buf_get_fname(buf_T *buf)
|
||||
{
|
||||
if (buf->b_fname == NULL)
|
||||
return (char_u *)_("[No Name]");
|
||||
return buf->b_fname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set 'buflisted' for curbuf to "on" and trigger autocommands if it changed.
|
||||
*/
|
||||
|
@ -66,6 +66,7 @@ int bt_dontwrite(buf_T *buf);
|
||||
int bt_dontwrite_msg(buf_T *buf);
|
||||
int buf_hide(buf_T *buf);
|
||||
char_u *buf_spname(buf_T *buf);
|
||||
char_u *buf_get_fname(buf_T *buf);
|
||||
void set_buflisted(int on);
|
||||
int buf_contents_changed(buf_T *buf);
|
||||
void wipe_buffer(buf_T *buf, int aucmd);
|
||||
|
@ -1598,7 +1598,7 @@ term_try_stop_job(buf_T *buf)
|
||||
char_u buff[DIALOG_MSG_SIZE];
|
||||
int ret;
|
||||
|
||||
dialog_msg(buff, _("Kill job in \"%s\"?"), buf->b_fname);
|
||||
dialog_msg(buff, _("Kill job in \"%s\"?"), buf_get_fname(buf));
|
||||
ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
|
||||
if (ret == VIM_YES)
|
||||
how = "kill";
|
||||
@ -4517,6 +4517,7 @@ term_get_status_text(term_T *term)
|
||||
{
|
||||
char_u *txt;
|
||||
size_t len;
|
||||
char_u *fname;
|
||||
|
||||
if (term->tl_normal_mode)
|
||||
{
|
||||
@ -4533,11 +4534,12 @@ term_get_status_text(term_T *term)
|
||||
txt = (char_u *)_("running");
|
||||
else
|
||||
txt = (char_u *)_("finished");
|
||||
len = 9 + STRLEN(term->tl_buffer->b_fname) + STRLEN(txt);
|
||||
fname = buf_get_fname(term->tl_buffer);
|
||||
len = 9 + STRLEN(fname) + STRLEN(txt);
|
||||
term->tl_status_text = alloc(len);
|
||||
if (term->tl_status_text != NULL)
|
||||
vim_snprintf((char *)term->tl_status_text, len, "%s [%s]",
|
||||
term->tl_buffer->b_fname, txt);
|
||||
fname, txt);
|
||||
}
|
||||
return term->tl_status_text;
|
||||
}
|
||||
|
@ -41,6 +41,16 @@ func Test_terminal_basic()
|
||||
unlet g:job
|
||||
endfunc
|
||||
|
||||
func Test_terminal_no_name()
|
||||
let buf = Run_shell_in_terminal({})
|
||||
call assert_match('^!', bufname(buf))
|
||||
0file
|
||||
call assert_equal("", bufname(buf))
|
||||
call assert_match('\[No Name\]', execute('file'))
|
||||
call StopShellInTerminal(buf)
|
||||
call TermWait(buf)
|
||||
endfunc
|
||||
|
||||
func Test_terminal_TerminalWinOpen()
|
||||
au TerminalWinOpen * let b:done = 'yes'
|
||||
let buf = Run_shell_in_terminal({})
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1959,
|
||||
/**/
|
||||
1958,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user