Commit d9de3e03 authored by Serhiy Storchaka's avatar Serhiy Storchaka

PyErr_NormalizeException doesn't like being called with an exception set

(issues #21677, #21310).
parent 060e1813
...@@ -470,14 +470,14 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds) ...@@ -470,14 +470,14 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
if (_PyObject_CallMethodId(result, &PyId_close, NULL) != NULL) if (_PyObject_CallMethodId(result, &PyId_close, NULL) != NULL)
PyErr_Restore(exc, val, tb); PyErr_Restore(exc, val, tb);
else { else {
PyObject *val2; PyObject *exc2, *val2, *tb2;
PyErr_Fetch(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val, &tb); PyErr_NormalizeException(&exc, &val, &tb);
Py_XDECREF(exc); Py_XDECREF(exc);
Py_XDECREF(tb); Py_XDECREF(tb);
PyErr_Fetch(&exc, &val2, &tb); PyErr_NormalizeException(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val2, &tb);
PyException_SetContext(val2, val); PyException_SetContext(val2, val);
PyErr_Restore(exc, val2, tb); PyErr_Restore(exc2, val2, tb2);
} }
Py_DECREF(result); Py_DECREF(result);
} }
......
...@@ -548,14 +548,14 @@ buffered_close(buffered *self, PyObject *args) ...@@ -548,14 +548,14 @@ buffered_close(buffered *self, PyObject *args)
PyErr_Restore(exc, val, tb); PyErr_Restore(exc, val, tb);
} }
else { else {
PyObject *val2; PyObject *exc2, *val2, *tb2;
PyErr_Fetch(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val, &tb); PyErr_NormalizeException(&exc, &val, &tb);
Py_DECREF(exc); Py_DECREF(exc);
Py_XDECREF(tb); Py_XDECREF(tb);
PyErr_Fetch(&exc, &val2, &tb); PyErr_NormalizeException(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val2, &tb);
PyException_SetContext(val2, val); PyException_SetContext(val2, val);
PyErr_Restore(exc, val2, tb); PyErr_Restore(exc2, val2, tb2);
} }
} }
......
...@@ -2613,14 +2613,14 @@ textiowrapper_close(textio *self, PyObject *args) ...@@ -2613,14 +2613,14 @@ textiowrapper_close(textio *self, PyObject *args)
PyErr_Restore(exc, val, tb); PyErr_Restore(exc, val, tb);
} }
else { else {
PyObject *val2; PyObject *exc2, *val2, *tb2;
PyErr_Fetch(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val, &tb); PyErr_NormalizeException(&exc, &val, &tb);
Py_DECREF(exc); Py_DECREF(exc);
Py_XDECREF(tb); Py_XDECREF(tb);
PyErr_Fetch(&exc, &val2, &tb); PyErr_NormalizeException(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val2, &tb);
PyException_SetContext(val2, val); PyException_SetContext(val2, val);
PyErr_Restore(exc, val2, tb); PyErr_Restore(exc2, val2, tb2);
} }
} }
return res; return res;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment