]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.557 v7.3.557
authorBram Moolenaar <Bram@vim.org>
Wed, 20 Jun 2012 09:55:01 +0000 (11:55 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 20 Jun 2012 09:55:01 +0000 (11:55 +0200)
Problem:    Crash when an autocommand wipes out a buffer when it is hidden.
Solution:   Restore the current window when needed. (Christian Brabandt)

src/buffer.c
src/version.c

index e27626eb167ccfebcdf93ea58fb0ed4fdece5b02..183429159d6ce2044a5ca9aafbcf94e4648d4806 100644 (file)
@@ -1363,6 +1363,7 @@ set_curbuf(buf, action)
     int                action;
 {
     buf_T      *prevbuf;
+    win_T      *prevwin;
     int                unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
                                                     || action == DOBUF_WIPE);
 
@@ -1402,22 +1403,30 @@ set_curbuf(buf, action)
        if (buf_valid(prevbuf))
 #endif
        {
+           prevwin = curwin;
            if (prevbuf == curbuf)
                u_sync(FALSE);
            close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
                    unload ? action : (action == DOBUF_GOTO
                        && !P_HID(prevbuf)
                        && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+           if (curwin != prevwin && win_valid(prevwin))
+             /* autocommands changed curwin, Grr! */
+             curwin = prevwin;
        }
     }
 #ifdef FEAT_AUTOCMD
     /* An autocommand may have deleted "buf", already entered it (e.g., when
-     * it did ":bunload") or aborted the script processing! */
-# ifdef FEAT_EVAL
-    if (buf_valid(buf) && buf != curbuf && !aborting())
-# else
-    if (buf_valid(buf) && buf != curbuf)
-# endif
+     * it did ":bunload") or aborted the script processing!
+     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+    if ((buf_valid(buf) && buf != curbuf
+#ifdef FEAT_EVAL
+           && !aborting()
+#endif
+#ifdef FEAT_WINDOWS
+        ) || curwin->w_buffer == NULL
+#endif
+       )
 #endif
        enter_buffer(buf);
 }
index 9dcb811be1853d590f6c3bb728d6fc3e5e8ff276..bfa3be2c17248dc9f640962413f7a9f809d44d49 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    557,
 /**/
     556,
 /**/