forked from aniani/vim
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)
|
if (buf->b_fname == NULL)
|
||||||
return (char_u *)_("[No Name]");
|
return buf_get_fname(buf);
|
||||||
return NULL;
|
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.
|
* 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 bt_dontwrite_msg(buf_T *buf);
|
||||||
int buf_hide(buf_T *buf);
|
int buf_hide(buf_T *buf);
|
||||||
char_u *buf_spname(buf_T *buf);
|
char_u *buf_spname(buf_T *buf);
|
||||||
|
char_u *buf_get_fname(buf_T *buf);
|
||||||
void set_buflisted(int on);
|
void set_buflisted(int on);
|
||||||
int buf_contents_changed(buf_T *buf);
|
int buf_contents_changed(buf_T *buf);
|
||||||
void wipe_buffer(buf_T *buf, int aucmd);
|
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];
|
char_u buff[DIALOG_MSG_SIZE];
|
||||||
int ret;
|
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);
|
ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
|
||||||
if (ret == VIM_YES)
|
if (ret == VIM_YES)
|
||||||
how = "kill";
|
how = "kill";
|
||||||
@ -4517,6 +4517,7 @@ term_get_status_text(term_T *term)
|
|||||||
{
|
{
|
||||||
char_u *txt;
|
char_u *txt;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
char_u *fname;
|
||||||
|
|
||||||
if (term->tl_normal_mode)
|
if (term->tl_normal_mode)
|
||||||
{
|
{
|
||||||
@ -4533,11 +4534,12 @@ term_get_status_text(term_T *term)
|
|||||||
txt = (char_u *)_("running");
|
txt = (char_u *)_("running");
|
||||||
else
|
else
|
||||||
txt = (char_u *)_("finished");
|
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);
|
term->tl_status_text = alloc(len);
|
||||||
if (term->tl_status_text != NULL)
|
if (term->tl_status_text != NULL)
|
||||||
vim_snprintf((char *)term->tl_status_text, len, "%s [%s]",
|
vim_snprintf((char *)term->tl_status_text, len, "%s [%s]",
|
||||||
term->tl_buffer->b_fname, txt);
|
fname, txt);
|
||||||
}
|
}
|
||||||
return term->tl_status_text;
|
return term->tl_status_text;
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,16 @@ func Test_terminal_basic()
|
|||||||
unlet g:job
|
unlet g:job
|
||||||
endfunc
|
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()
|
func Test_terminal_TerminalWinOpen()
|
||||||
au TerminalWinOpen * let b:done = 'yes'
|
au TerminalWinOpen * let b:done = 'yes'
|
||||||
let buf = Run_shell_in_terminal({})
|
let buf = Run_shell_in_terminal({})
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
1959,
|
||||||
/**/
|
/**/
|
||||||
1958,
|
1958,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user