]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-134 v7.0.134
authorBram Moolenaar <Bram@vim.org>
Sun, 15 Oct 2006 13:09:12 +0000 (13:09 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 15 Oct 2006 13:09:12 +0000 (13:09 +0000)
src/eval.c
src/version.c

index 13c0bd618c5ec375d6d03b91125752553be9ae62..aebd682f5c38fbd472da3b670d5c34023c54c2f6 100644 (file)
@@ -5520,19 +5520,27 @@ tv_equal(tv1, tv2, ic)
 {
     char_u     buf1[NUMBUFLEN], buf2[NUMBUFLEN];
     char_u     *s1, *s2;
+    static int  recursive = 0;     /* cach recursive loops */
+    int                r;
 
-    if (tv1->v_type != tv2->v_type)
+    /* Catch lists and dicts that have an endless loop by limiting
+     * recursiveness to 1000. */
+    if (tv1->v_type != tv2->v_type || recursive >= 1000)
        return FALSE;
 
     switch (tv1->v_type)
     {
        case VAR_LIST:
-           /* recursive! */
-           return list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+           ++recursive;
+           r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+           --recursive;
+           return r;
 
        case VAR_DICT:
-           /* recursive! */
-           return dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+           ++recursive;
+           r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+           --recursive;
+           return r;
 
        case VAR_FUNC:
            return (tv1->vval.v_string != NULL
index 373fa1bf8779d49baa824b4784a7788db2cd2193..ecf17962f6911942056984227c4b6a25b93da3fb 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    134,
 /**/
     133,
 /**/