Kaydet (Commit) d49cbe10 authored tarafından Jack Jansen's avatar Jack Jansen

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!)
üst e979160f
...@@ -11,6 +11,9 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. ...@@ -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; ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment