]> granicus.if.org Git - vim/commitdiff
patch 7.4.1647 v7.4.1647
authorBram Moolenaar <Bram@vim.org>
Fri, 25 Mar 2016 14:01:10 +0000 (15:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 25 Mar 2016 14:01:10 +0000 (15:01 +0100)
Problem:    Using freed memory after setqflist() and ":caddbuffer".  (Dominique)
Solution:   Set qf_ptr when adding the first item to the quickfix list.

src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c

index a2506e1a32ebb8b2a9bf02b626d6132dcd103a76..c2ff55a8c0e9ec79a7e735ee44271b95ccf69939 100644 (file)
@@ -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);
index 667ece4e677bbe0a234d88047990ae90363467d6..e56c8a2391ba0d237d06538eab7bde50a7e61a14 100644 (file)
@@ -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
index 4ab8eed71fdaa7e36dfc68f04cf3f3db3f904f9f..95e2cba565b5ae31eda8ca132c50c27b30ee476f 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1647,
 /**/
     1646,
 /**/