Patch 8.0.0606
Problem:    Cannot set the context for a specified quickfix list.
Solution:   Use the list index instead of the current list. (Yegappan
            Lakshmanan)
Files:      src/quickfix.c, src/testdir/test_quickfix.vim


*** ../vim-8.0.0605/src/quickfix.c      2017-05-28 07:56:30.330985871 +0200
--- src/quickfix.c      2017-05-28 08:12:01.305210132 +0200
***************
*** 4881,4887 ****
        /* Use the specified quickfix/location list */
        if (di->di_tv.v_type == VAR_NUMBER)
        {
!           qf_idx = di->di_tv.vval.v_number - 1;
            if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
                return FAIL;
        }
--- 4881,4889 ----
        /* Use the specified quickfix/location list */
        if (di->di_tv.v_type == VAR_NUMBER)
        {
!           /* for zero use the current list */
!           if (di->di_tv.vval.v_number != 0)
!               qf_idx = di->di_tv.vval.v_number - 1;
            if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
                return FAIL;
        }
***************
*** 4912,4922 ****
      if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
      {
        typval_T        *ctx;
!       free_tv(qi->qf_lists[qi->qf_curlist].qf_ctx);
        ctx =  alloc_tv();
        if (ctx != NULL)
            copy_tv(&di->di_tv, ctx);
!       qi->qf_lists[qi->qf_curlist].qf_ctx = ctx;
      }
  
      return retval;
--- 4914,4924 ----
      if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
      {
        typval_T        *ctx;
!       free_tv(qi->qf_lists[qf_idx].qf_ctx);
        ctx =  alloc_tv();
        if (ctx != NULL)
            copy_tv(&di->di_tv, ctx);
!       qi->qf_lists[qf_idx].qf_ctx = ctx;
      }
  
      return retval;
*** ../vim-8.0.0605/src/testdir/test_quickfix.vim       2017-04-30 
14:20:53.342830874 +0200
--- src/testdir/test_quickfix.vim       2017-05-28 08:12:01.305210132 +0200
***************
*** 1804,1809 ****
--- 1804,1840 ----
        call setloclist(0, [], 'f')
        call assert_equal({}, getloclist(0, {'context':1}))
      endif
+ 
+     " Test for changing the context of previous quickfix lists
+     call g:Xsetlist([], 'f')
+     Xexpr "One"
+     Xexpr "Two"
+     Xexpr "Three"
+     call g:Xsetlist([], ' ', {'context' : [1], 'nr' : 1})
+     call g:Xsetlist([], ' ', {'context' : [2], 'nr' : 2})
+     " Also, check for setting the context using quickfix list number zero.
+     call g:Xsetlist([], ' ', {'context' : [3], 'nr' : 0})
+     call test_garbagecollect_now()
+     let l = g:Xgetlist({'nr' : 1, 'context' : 1})
+     call assert_equal([1], l.context)
+     let l = g:Xgetlist({'nr' : 2, 'context' : 1})
+     call assert_equal([2], l.context)
+     let l = g:Xgetlist({'nr' : 3, 'context' : 1})
+     call assert_equal([3], l.context)
+ 
+     " Test for changing the context through reference and for garbage
+     " collection of quickfix context
+     let l = ["red"]
+     call g:Xsetlist([], ' ', {'context' : l})
+     call add(l, "blue")
+     let x = g:Xgetlist({'context' : 1})
+     call add(x.context, "green")
+     call assert_equal(["red", "blue", "green"], l)
+     call assert_equal(["red", "blue", "green"], x.context)
+     unlet l
+     call test_garbagecollect_now()
+     let m = g:Xgetlist({'context' : 1})
+     call assert_equal(["red", "blue", "green"], m.context)
  endfunc
  
  func Test_qf_property()
***************
*** 2073,2075 ****
--- 2104,2122 ----
    call XfreeTests('c')
    call XfreeTests('l')
  endfunc
+ 
+ " Test for buffer overflow when parsing lines and adding new entries to
+ " the quickfix list.
+ func Test_bufoverflow()
+   set efm=%f:%l:%m
+   cgetexpr ['File1:100:' . repeat('x', 1025)]
+ 
+   set efm=%+GCompiler:\ %.%#,%f:%l:%m
+   cgetexpr ['Compiler: ' . repeat('a', 1015), 'File1:10:Hello World']
+ 
+   set efm=%DEntering\ directory\ %f,%f:%l:%m
+   cgetexpr ['Entering directory ' . repeat('a', 1006),
+             \ 'File1:10:Hello World']
+   set efm&vim
+ endfunc
+ 
*** ../vim-8.0.0605/src/version.c       2017-05-28 07:56:30.330985871 +0200
--- src/version.c       2017-05-28 08:14:47.728176558 +0200
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     606,
  /**/

-- 
FIRST VILLAGER: We have found a witch.  May we burn her?
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui