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