aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-06-22 21:02:22 -0400
committerJames McCoy <jamessan@jamessan.com>2016-06-22 21:10:07 -0400
commitcde1d818d0a9ecbed0a4db95ae701b970e7f3c09 (patch)
treee0b2df227aef2aeae90caf98d96a808de1ee2c2c /src
parenta2ecbc2cc093d6639b8d3e0262909191dfa9aba4 (diff)
downloadrneovim-cde1d818d0a9ecbed0a4db95ae701b970e7f3c09.tar.gz
rneovim-cde1d818d0a9ecbed0a4db95ae701b970e7f3c09.tar.bz2
rneovim-cde1d818d0a9ecbed0a4db95ae701b970e7f3c09.zip
vim-patch:7.4.1592
Problem: Quickfix code using memory after being freed. (Dominique Pelle) Solution: Detect that the window was closed. (Hirohito Higashi) https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Diffstat (limited to 'src')
-rw-r--r--src/nvim/quickfix.c18
-rw-r--r--src/nvim/version.c2
2 files changed, 15 insertions, 5 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 151b9d3790..f48560007a 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -1581,9 +1581,17 @@ win_found:
ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
ECMD_HIDE + ECMD_SET_HELP,
oldwin == curwin ? curwin : NULL);
- } else
+ } else {
ok = buflist_getfile(qf_ptr->qf_fnum,
(linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+ if (qi != &ql_info && !win_valid(oldwin)) {
+ EMSG(_("E924: Current window was closed"));
+ ok = false;
+ qi = NULL;
+ qf_ptr = NULL;
+ opened_window = false;
+ }
+ }
}
if (ok == OK) {
@@ -1665,7 +1673,7 @@ win_found:
} else {
if (opened_window)
win_close(curwin, TRUE); /* Close opened window */
- if (qf_ptr->qf_fnum != 0) {
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0) {
/*
* Couldn't open file, so put index back where it was. This could
* happen if the file was readonly and we changed something.
@@ -1676,8 +1684,10 @@ failed:
}
}
theend:
- qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
- qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ if (qi != NULL) {
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
+ qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ }
if (p_swb != old_swb && opened_window) {
/* Restore old 'switchbuf' value, but not when an autocommand or
* modeline has changed the value. */
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 5364fee953..540c253c49 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -100,7 +100,7 @@ static int included_patches[] = {
// 1595 NA
// 1594 NA
// 1593 NA
- // 1592,
+ 1592,
// 1591,
// 1590,
// 1589,