]> granicus.if.org Git - vim/commitdiff
patch 7.4.2225 v7.4.2225
authorBram Moolenaar <Bram@vim.org>
Wed, 17 Aug 2016 20:29:09 +0000 (22:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 17 Aug 2016 20:29:09 +0000 (22:29 +0200)
Problem:    Crash when placing a sign in a deleted buffer.
Solution:   Check for missing buffer name. (Dominique Pelle). Add a test.

src/ex_cmds.c
src/testdir/test_signs.vim
src/version.c

index aeb2bf952d21f668a324326a999746b4ee985009..919aafc7cc57d7fe6e3be50e9fbc478bfa3b98c1 100644 (file)
@@ -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;
index 79e60986ee1987d6586949c0be53f967558330be..93cc62cd9caf01b5f742593f08adc33a7ab42456 100644 (file)
@@ -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
index b047882a504a81ca003b81d1512ff2e6ea0e9f7f..f4a340ee5185282b1c67c3cb15e987f4e6a208c9 100644 (file)
@@ -763,6 +763,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2225,
 /**/
     2224,
 /**/