Vim crashes with list range assign.

Steps to reproduce:
  $ vim -u NONE
  :let x = [0]
  :let x[:] = [1, 2]
  Vim: Caught deadly signal SEGV
  Vim: Finished.

Please check the following patch.


diff -r 4604a182f04c src/eval.c
--- a/src/eval.c    Sun Nov 30 22:51:06 2014 +0100
+++ b/src/eval.c    Mon Dec 01 22:02:13 2014 +0900
@@ -2951,7 +2951,7 @@
     /*
      * Check whether any of the list items is locked
      */
-    for (ri = rettv->vval.v_list->lv_first; ri != NULL; )
+    for (ri = rettv->vval.v_list->lv_first; ri != NULL && ll_li != NULL; )
     {
         if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
         return;
diff -r 4604a182f04c src/testdir/test55.in
--- a/src/testdir/test55.in    Sun Nov 30 22:51:06 2014 +0100
+++ b/src/testdir/test55.in    Mon Dec 01 22:02:13 2014 +0900
@@ -401,6 +401,11 @@
 :  $put =v:exception[:15] . v:exception[-1:-1]
 :endtry
 :$put =string(d)
+:"
+:" test for range assign
+:let l = [0]
+:let l[:] = [1, 2]
+:$put =string(l)
 :endfun
 :"
 :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
diff -r 4604a182f04c src/testdir/test55.ok
--- a/src/testdir/test55.ok    Sun Nov 30 22:51:06 2014 +0100
+++ b/src/testdir/test55.ok    Mon Dec 01 22:02:13 2014 +0900
@@ -129,6 +129,7 @@
 {'a': {'b': 'B'}}
 Vim(call):E737: a
 {'a': {'b': 'B'}}
+[1, 2]
 Vim(foldopen):E490:

-- 
Yukihiro Nakadaira - yukihiro.nakada...@gmail.com

-- 
-- 
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.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui