changeset 1008:58059676e24a v7.0.134

updated for version 7.0-134
author vimboss
date Sun, 15 Oct 2006 13:09:12 +0000
parents 7d29124f77f5
children 721ebb602db0
files src/eval.c src/version.c
diffstat 2 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -5520,19 +5520,27 @@ tv_equal(tv1, tv2, ic)
 {
     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
     char_u	*s1, *s2;
-
-    if (tv1->v_type != tv2->v_type)
+    static int  recursive = 0;	    /* cach recursive loops */
+    int		r;
+
+    /* 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
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    134,
+/**/
     133,
 /**/
     132,