# HG changeset patch # User vimboss # Date 1160917752 0 # Node ID 58059676e24a6fbbc686faf84c612cfa8c25485d # Parent 7d29124f77f5e794008c746c69a0f79da0cd966a updated for version 7.0-134 diff --git a/src/eval.c b/src/eval.c --- 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 diff --git a/src/version.c b/src/version.c --- 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,