diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-03-24 11:53:59 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-03-24 11:53:59 (GMT) |
commit | 3b06dfb9d13b47d6597bb28b5eda76e9976246ca (patch) | |
tree | d8841540999cbfd9f384258a8f881f7035c36d67 /Objects | |
parent | de821befd4a924adb50458163a14dfe6ea9ed448 (diff) | |
download | cpython-3b06dfb9d13b47d6597bb28b5eda76e9976246ca.zip cpython-3b06dfb9d13b47d6597bb28b5eda76e9976246ca.tar.gz cpython-3b06dfb9d13b47d6597bb28b5eda76e9976246ca.tar.bz2 |
Issue #23571: In debug mode, _Py_CheckFunctionResult() now calls
Py_FatalError() instead of using an assertion in debug mode. Py_FatalError()
displays the current exception and the traceback which contain more information
than just the assertion error.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/abstract.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index a19d28c..6f8432e 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2080,16 +2080,6 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where) assert((func != NULL) ^ (where != NULL)); -#ifndef NDEBUG - /* In debug mode: abort() with an assertion error. Use two different - assertions, so if an assertion fails, it's possible to know - if result was set or not and if an exception was raised or not. */ - if (result != NULL) - assert(!err_occurred); - else - assert(err_occurred); -#endif - if (result == NULL) { if (!err_occurred) { if (func) @@ -2100,7 +2090,7 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where) PyErr_Format(PyExc_SystemError, "%s returned NULL without setting an error", where); - return NULL; + goto error; } } else { @@ -2119,10 +2109,17 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where) "%s returned a result with an error set", where); _PyErr_ChainExceptions(exc, val, tb); - return NULL; + goto error; } } return result; + +error: +#ifdef Py_DEBUG + /* Ensure that the bug is catched in debug mode */ + Py_FatalError("Function result is invalid"); +#endif + return NULL; } PyObject * |