changeset: 95156:2e14ca478a57 user: Victor Stinner date: Tue Mar 24 12:41:23 2015 +0100 files: Python/errors.c description: Issue #23571: PyErr_FormatV() and PyErr_SetObject() now always clear the current exception because they can run arbitrary Python code and so no exception must be set. diff -r ad5521dd7b80 -r 2e14ca478a57 Python/errors.c --- a/Python/errors.c Tue Mar 24 12:16:28 2015 +0100 +++ b/Python/errors.c Tue Mar 24 12:41:23 2015 +0100 @@ -74,11 +74,11 @@ if (value == NULL || !PyExceptionInstance_Check(value)) { /* We must normalize the value right now */ PyObject *args, *fixed_value; -#ifdef Py_DEBUG - /* in debug mode, PyEval_EvalFrameEx() fails with an assertion - error if an exception is set when it is called */ + + /* Issue #23571: PyEval_CallObject() must not be called with an + exception set */ PyErr_Clear(); -#endif + if (value == NULL || value == Py_None) args = PyTuple_New(0); else if (PyTuple_Check(value)) { @@ -778,13 +778,12 @@ { PyObject* string; -#ifdef Py_DEBUG - /* in debug mode, PyEval_EvalFrameEx() fails with an assertion error - if an exception is set when it is called */ + /* Issue #23571: PyUnicode_FromFormatV() must not be called with an + exception set, it calls arbitrary Python code like PyObject_Repr() */ PyErr_Clear(); -#endif string = PyUnicode_FromFormatV(format, vargs); + PyErr_SetObject(exception, string); Py_XDECREF(string); return NULL;