diff options
author | Mark Shannon <mark@hotpy.org> | 2025-02-19 11:44:57 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-19 11:44:57 (GMT) |
commit | 2498c22fa0a2b560491bc503fa676585c1a603d0 (patch) | |
tree | 1e045c5f71ff6674cdd2c247c99565697e088a87 /Python/pythonrun.c | |
parent | c637bce20aaaf836ab2cfbb123b9472e5ad0ab47 (diff) | |
download | cpython-2498c22fa0a2b560491bc503fa676585c1a603d0.zip cpython-2498c22fa0a2b560491bc503fa676585c1a603d0.tar.gz cpython-2498c22fa0a2b560491bc503fa676585c1a603d0.tar.bz2 |
GH-91079: Implement C stack limits using addresses, not counters. (GH-130007)
* Implement C recursion protection with limit pointers
* Remove calls to PyOS_CheckStack
* Add stack protection to parser
* Make tests more robust to low stacks
* Improve error messages for stack overflow
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 945e267..36390da 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1528,12 +1528,8 @@ _Py_SourceAsString(PyObject *cmd, const char *funcname, const char *what, PyComp } #if defined(USE_STACKCHECK) -#if defined(WIN32) && defined(_MSC_VER) -/* Stack checking for Microsoft C */ - -#include <malloc.h> -#include <excpt.h> +/* Stack checking */ /* * Return non-zero when we run out of memory on the stack; zero otherwise. @@ -1541,27 +1537,10 @@ _Py_SourceAsString(PyObject *cmd, const char *funcname, const char *what, PyComp int PyOS_CheckStack(void) { - __try { - /* alloca throws a stack overflow exception if there's - not enough space left on the stack */ - alloca(PYOS_STACK_MARGIN * sizeof(void*)); - return 0; - } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? - EXCEPTION_EXECUTE_HANDLER : - EXCEPTION_CONTINUE_SEARCH) { - int errcode = _resetstkoflw(); - if (errcode == 0) - { - Py_FatalError("Could not reset the stack!"); - } - } - return 1; + PyThreadState *tstate = _PyThreadState_GET(); + return _Py_ReachedRecursionLimit(tstate); } -#endif /* WIN32 && _MSC_VER */ - -/* Alternate implementations can be added here... */ - #endif /* USE_STACKCHECK */ /* Deprecated C API functions still provided for binary compatibility */ |