From: Bram Moolenaar Date: Tue, 19 Jan 2016 13:51:54 +0000 (+0100) Subject: patch 7.4.1137 X-Git-Tag: v7.4.1137 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=62ef797496c6243d111c596a592a8ef8c1d1e710;p=vim patch 7.4.1137 Problem: Illegal memory access when using :copen and :cclose. Solution: Avoid that curbuf is invalid. (suggestion by Justin M. Keyes) Add a test. --- diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index b2fc9683a..a4d0f209e 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -295,4 +295,10 @@ function Test_nomem() endfunc +function Test_helpgrep() + helpgrep quickfix + copen + " This wipes out the buffer, make sure that doesn't cause trouble. + cclose +endfunc diff --git a/src/version.c b/src/version.c index 30e60687e..845158b1f 100644 --- a/src/version.c +++ b/src/version.c @@ -741,6 +741,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1137, /**/ 1136, /**/ diff --git a/src/window.c b/src/window.c index 95515b57d..408c4bd22 100644 --- a/src/window.c +++ b/src/window.c @@ -2445,6 +2445,10 @@ win_close(win, free_buf) if (win_valid(win)) win->w_closing = FALSE; #endif + /* Make sure curbuf is valid. It can become invalid if 'bufhidden' is + * "wipe". */ + if (!buf_valid(curbuf)) + curbuf = firstbuf; } if (only_one_window() && win_valid(win) && win->w_buffer == NULL