]> granicus.if.org Git - python/commitdiff
Issue #23571: In debug mode, _Py_CheckFunctionResult() now calls
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Mar 2015 11:53:59 +0000 (12:53 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Mar 2015 11:53:59 +0000 (12:53 +0100)
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.

Objects/abstract.c

index a19d28c54919b838934c8f13fc75e9ea0e5fcf49..6f8432efefd2064bc2502fd19f13c2b8232ff689 100644 (file)
@@ -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 *