From d49cbe10603c1b84a408c47f15131c44edad2f32 Mon Sep 17 00:00:00 2001
From: Jack Jansen <jack.jansen@cwi.nl>
Date: Tue, 22 Aug 2000 21:52:51 +0000
Subject: [PATCH] Added PyOS_CheckStack call to PyObject_Compare Lowered the
 recursion limit on compares to 60 (one recursion depth can take a whopping 2K
 of stack space when running test_b1!)

---
 Objects/object.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/Objects/object.c b/Objects/object.c
index f61a1dda65..1f02aaeef9 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -11,6 +11,9 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 /* Generic object operations; and implementation of None (NoObject) */
 
 #include "Python.h"
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
 
 #ifdef macintosh
 #include "macglue.h"
@@ -339,7 +342,11 @@ PyObject *_PyCompareState_Key;
    some types) and decremented on exit.  If the count exceeds the
    nesting limit, enable code to detect circular data structures.
 */
+#ifdef macintosh
+#define NESTING_LIMIT 60
+#else
 #define NESTING_LIMIT 500
+#endif
 int _PyCompareState_nesting = 0;
 
 static PyObject*
@@ -394,6 +401,12 @@ PyObject_Compare(PyObject *v, PyObject *w)
 	PyTypeObject *vtp, *wtp;
 	int result;
 
+#if defined(USE_STACKCHECK)
+	if (PyOS_CheckStack() < 0) {
+		PyErr_SetString(PyExc_MemoryError, "Stack overflow");
+        return -1;
+	}
+#endif
 	if (v == NULL || w == NULL) {
 		PyErr_BadInternalCall();
 		return -1;
-- 
2.40.0