summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2008-08-08 10:36:31 +0000
committerBram Moolenaar <Bram@vim.org>2008-08-08 10:36:31 +0000
commitdc9cf9cd6d48ad9c6e25427f958401adc4a913ac (patch)
treebc7ca5b53d6f86d9281ebf8f415e7d8148d5f223 /src/eval.c
parente37d50a5def1c0ff162392cd3f017059c458650c (diff)
updated for version 7.2c-001v7.2c.001
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index cb548d30dc..5802a08940 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6231,8 +6231,11 @@ list_extend(l1, l2, bef)
listitem_T *bef;
{
listitem_T *item;
+ int todo = l2->lv_len;
- for (item = l2->lv_first; item != NULL; item = item->li_next)
+ /* We also quit the loop when we have inserted the original item count of
+ * the list, avoid a hang when we extend a list with itself. */
+ for (item = l2->lv_first; item != NULL && --todo >= 0; item = item->li_next)
if (list_insert_tv(l1, &item->li_tv, bef) == FAIL)
return FAIL;
return OK;