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!)
This commit is contained in:
Jack Jansen 2000-08-22 21:52:51 +00:00
parent e979160f5e
commit d49cbe1060
1 changed files with 13 additions and 0 deletions

View File

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