From: Bram Moolenaar Date: Sun, 28 May 2017 05:56:36 +0000 (+0200) Subject: patch 8.0.0605: the quickfix cached buffer may become invalid X-Git-Tag: v8.0.0605 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6dd4a53502fb4ec1b66104eab1805e7254ad9e41;p=vim patch 8.0.0605: the quickfix cached buffer may become invalid Problem: The buffer that quickfix caches for performance may become invalid. (Daniel Hahler) Solution: Reset qf_last_bufref in qf_init_ext(). (Daniel Hahler, closes #1728, closes #1676) --- diff --git a/src/quickfix.c b/src/quickfix.c index 9626cfa43..ce21661a6 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -157,6 +157,13 @@ static qf_info_T *ll_get_or_alloc_list(win_T *); */ #define GET_LOC_LIST(wp) (IS_LL_WINDOW(wp) ? wp->w_llist_ref : wp->w_llist) +/* + * Looking up a buffer can be slow if there are many. Remember the last one + * to make this a lot faster if there are multiple matches in the same file. + */ +static char_u *qf_last_bufname = NULL; +static bufref_T qf_last_bufref = {NULL, 0}; + /* * Read the errorfile "efile" into memory, line by line, building the error * list. Set the error list's title to qf_title. @@ -1151,6 +1158,10 @@ qf_init_ext( int retval = -1; /* default: return error flag */ int status; + /* Do not used the cached buffer, it may have been wiped out. */ + vim_free(qf_last_bufname); + qf_last_bufname = NULL; + vim_memset(&state, 0, sizeof(state)); vim_memset(&fields, 0, sizeof(fields)); #ifdef FEAT_MBYTE @@ -1659,13 +1670,6 @@ copy_loclist(win_T *from, win_T *to) to->w_llist->qf_curlist = qi->qf_curlist; /* current list */ } -/* - * Looking up a buffer can be slow if there are many. Remember the last one - * to make this a lot faster if there are multiple matches in the same file. - */ -static char_u *qf_last_bufname = NULL; -static bufref_T qf_last_bufref = {NULL, 0}; - /* * Get buffer number for file "directory/fname". * Also sets the b_has_qf_entry flag. diff --git a/src/version.c b/src/version.c index bc80ace74..2c5aa06fd 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 */ +/**/ + 605, /**/ 604, /**/