summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-25 15:01:10 +0100
committerBram Moolenaar <Bram@vim.org>2016-03-25 15:01:10 +0100
commit8b20179c657b4266dff115486ca68c6a50324071 (patch)
treedf53aba36a9b71647886c07e04ba6b519005deb0 /src
parent4c90861e9f864eab94f043c432acff508396ed62 (diff)
downloadvim-git-8b20179c657b4266dff115486ca68c6a50324071.tar.gz
patch 7.4.1647v7.4.1647
Problem: Using freed memory after setqflist() and ":caddbuffer". (Dominique) Solution: Set qf_ptr when adding the first item to the quickfix list.
Diffstat (limited to 'src')
-rw-r--r--src/quickfix.c5
-rw-r--r--src/testdir/test_quickfix.vim8
-rw-r--r--src/version.c2
3 files changed, 14 insertions, 1 deletions
diff --git a/src/quickfix.c b/src/quickfix.c
index a2506e1a3..c2ff55a8c 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1027,6 +1027,8 @@ qf_add_entry(
/* first element in the list */
{
qi->qf_lists[qi->qf_curlist].qf_start = qfp;
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qfp;
+ qi->qf_lists[qi->qf_curlist].qf_index = 0;
qfp->qf_prev = qfp; /* first element points to itself */
}
else
@@ -4113,7 +4115,8 @@ set_errorlist(
else
qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
- qi->qf_lists[qi->qf_curlist].qf_index = 1;
+ if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ qi->qf_lists[qi->qf_curlist].qf_index = 1;
#ifdef FEAT_WINDOWS
qf_update_buffer(qi);
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 667ece4e6..e56c8a239 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -679,3 +679,11 @@ function Test_quickfix_was_changed_by_autocmd()
call XquickfixChangedByAutocmd('c')
call XquickfixChangedByAutocmd('l')
endfunction
+
+func Test_caddbuffer_to_empty()
+ helpgr quickfix
+ call setqflist([], 'r')
+ cad
+ call assert_fails('cn', 'E553:')
+ quit!
+endfunc
diff --git a/src/version.c b/src/version.c
index 4ab8eed71..95e2cba56 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1647,
+/**/
1646,
/**/
1645,