summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-06-20 11:55:01 +0200
committerBram Moolenaar <Bram@vim.org>2012-06-20 11:55:01 +0200
commit9e931224db8f8843ddc778307984dbe37ebde47c (patch)
treef0529d7858bfae7c36ac786f0c70a046bed97781
parent36105782d2dfe526a0ca361d1c6c06e6f7a9ca6f (diff)
downloadvim-git-9e931224db8f8843ddc778307984dbe37ebde47c.tar.gz
updated for version 7.3.557v7.3.557
Problem: Crash when an autocommand wipes out a buffer when it is hidden. Solution: Restore the current window when needed. (Christian Brabandt)
-rw-r--r--src/buffer.c21
-rw-r--r--src/version.c2
2 files changed, 17 insertions, 6 deletions
diff --git a/src/buffer.c b/src/buffer.c
index e27626eb1..183429159 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -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);
}
diff --git a/src/version.c b/src/version.c
index 9dcb811be..bfa3be2c1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 557,
+/**/
556,
/**/
555,