summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-08-17 22:29:09 +0200
committerBram Moolenaar <Bram@vim.org>2016-08-17 22:29:09 +0200
commitbfd096d02087a10e8e2f4bdfb74e0435506fa8bb (patch)
tree5ae40d74396c8c0ade0f33230b5b8c813aeac8b1
parentaf9c4c9b5761c4c074237d87e2c95713bf721eab (diff)
patch 7.4.2225v7.4.2225
Problem: Crash when placing a sign in a deleted buffer. Solution: Check for missing buffer name. (Dominique Pelle). Add a test.
-rw-r--r--src/ex_cmds.c5
-rw-r--r--src/testdir/test_signs.vim12
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 0 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index aeb2bf952d..919aafc7cc 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -7861,6 +7861,11 @@ ex_sign(exarg_T *eap)
{ /* ... not currently in a window */
char_u *cmd;
+ if (buf->b_fname == NULL)
+ {
+ EMSG(_("E934: Cannot jump to a buffer that does not have a name"));
+ return;
+ }
cmd = alloc((unsigned)STRLEN(buf->b_fname) + 25);
if (cmd == NULL)
return;
diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim
index 79e60986ee..93cc62cd9c 100644
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -181,3 +181,15 @@ func Test_sign_invalid_commands()
call assert_fails('sign place 1 buffer=', 'E158:')
call assert_fails('sign define Sign2 text=', 'E239:')
endfunc
+
+func Test_sign_delete_buffer()
+ new
+ sign define Sign text=x
+ let bufnr = bufnr('%')
+ new
+ exe 'bd ' . bufnr
+ exe 'sign place 61 line=3 name=Sign buffer=' . bufnr
+ call assert_fails('sign jump 61 buffer=' . bufnr, 'E934:')
+ sign unplace 61
+ sign undefine Sign
+endfunc
diff --git a/src/version.c b/src/version.c
index b047882a50..f4a340ee51 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2225,
+/**/
2224,
/**/
2223,