diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-17 22:29:09 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-17 22:29:09 +0200 |
commit | bfd096d02087a10e8e2f4bdfb74e0435506fa8bb (patch) | |
tree | 5ae40d74396c8c0ade0f33230b5b8c813aeac8b1 /src | |
parent | af9c4c9b5761c4c074237d87e2c95713bf721eab (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.
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_cmds.c | 5 | ||||
-rw-r--r-- | src/testdir/test_signs.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |