mirror of https://github.com/python/cpython
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:
parent
e979160f5e
commit
d49cbe1060
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue