updated for version 7.0-134
diff --git a/src/eval.c b/src/eval.c
index 13c0bd6..aebd682 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5520,19 +5520,27 @@
 {
     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 373fa1b..ecf1796 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    134,
+/**/
     133,
 /**/
     132,