summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-03-24 11:53:59 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-03-24 11:53:59 (GMT)
commit3b06dfb9d13b47d6597bb28b5eda76e9976246ca (patch)
treed8841540999cbfd9f384258a8f881f7035c36d67 /Objects
parentde821befd4a924adb50458163a14dfe6ea9ed448 (diff)
downloadcpython-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.c21
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 *