Patch 8.2.1083
Problem:    Crash when using reduce() on a NULL list.
Solution:   Only access the list when not NULL.
Files:      src/list.c, src/testdir/test_listdict.vim


*** ../vim-8.2.1082/src/list.c  2020-06-27 21:17:55.359214424 +0200
--- src/list.c  2020-06-29 20:07:07.347220096 +0200
***************
*** 2475,2484 ****
        list_T      *l = argvars[0].vval.v_list;
        listitem_T  *li = NULL;
        int         r;
-       int         prev_locked = l->lv_lock;
        int         called_emsg_start = called_emsg;
  
!       CHECK_LIST_MATERIALIZE(l);
        if (argvars[2].v_type == VAR_UNKNOWN)
        {
            if (l == NULL || l->lv_first == NULL)
--- 2475,2484 ----
        list_T      *l = argvars[0].vval.v_list;
        listitem_T  *li = NULL;
        int         r;
        int         called_emsg_start = called_emsg;
  
!       if (l != NULL)
!           CHECK_LIST_MATERIALIZE(l);
        if (argvars[2].v_type == VAR_UNKNOWN)
        {
            if (l == NULL || l->lv_first == NULL)
***************
*** 2495,2514 ****
            if (l != NULL)
                li = l->lv_first;
        }
- 
-       l->lv_lock = VAR_FIXED;  // disallow the list changing here
        copy_tv(&initial, rettv);
!       for ( ; li != NULL; li = li->li_next)
        {
!           argv[0] = *rettv;
!           argv[1] = li->li_tv;
!           rettv->v_type = VAR_UNKNOWN;
!           r = call_func(func_name, -1, rettv, 2, argv, &funcexe);
!           clear_tv(&argv[0]);
!           if (r == FAIL || called_emsg != called_emsg_start)
!               break;
        }
-       l->lv_lock = prev_locked;
      }
      else
      {
--- 2495,2519 ----
            if (l != NULL)
                li = l->lv_first;
        }
        copy_tv(&initial, rettv);
! 
!       if (l != NULL)
        {
!           int     prev_locked = l->lv_lock;
! 
!           l->lv_lock = VAR_FIXED;  // disallow the list changing here
!           for ( ; li != NULL; li = li->li_next)
!           {
!               argv[0] = *rettv;
!               argv[1] = li->li_tv;
!               rettv->v_type = VAR_UNKNOWN;
!               r = call_func(func_name, -1, rettv, 2, argv, &funcexe);
!               clear_tv(&argv[0]);
!               if (r == FAIL || called_emsg != called_emsg_start)
!                   break;
!           }
!           l->lv_lock = prev_locked;
        }
      }
      else
      {
*** ../vim-8.2.1082/src/testdir/test_listdict.vim       2020-06-24 
22:07:41.816626147 +0200
--- src/testdir/test_listdict.vim       2020-06-29 20:08:50.598906721 +0200
***************
*** 718,723 ****
--- 718,726 ----
    call assert_fails("call reduce(g:lut, { acc, val -> EvilRemove() }, 1)", 
'E742:')
    unlet g:lut
    delfunc EvilRemove
+ 
+   call assert_equal(42, reduce(test_null_list(), function('add'), 42))
+   call assert_equal(42, reduce(test_null_blob(), function('add'), 42))
  endfunc
  
  " splitting a string to a List using split()
*** ../vim-8.2.1082/src/version.c       2020-06-29 19:55:54.885328478 +0200
--- src/version.c       2020-06-29 20:02:33.171734058 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1083,
  /**/

-- 
An SQL statement walks into a bar.  He approaches two tables
and says, "Mind if I join you?"

 /// Bram Moolenaar -- b...@moolenaar.net -- 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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202006291810.05TIA3CF673199%40masaka.moolenaar.net.

Raspunde prin e-mail lui