From: Bram Moolenaar Date: Sun, 15 Oct 2006 13:09:12 +0000 (+0000) Subject: updated for version 7.0-134 X-Git-Tag: v7.0.134 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b47a2405931b9fffbf678d381c3be6ff19d6e749;p=thirdparty%2Fvim.git updated for version 7.0-134 --- diff --git a/src/eval.c b/src/eval.c index 13c0bd618c..aebd682f5c 100644 --- 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; + 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 diff --git a/src/version.c b/src/version.c index 373fa1bf87..ecf17962f6 100644 --- a/src/version.c +++ b/src/version.c @@ -666,6 +666,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 134, /**/ 133, /**/