PyErr_NormalizeException doesn't like being called with an exception set
(issues #21677, #21310).
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index d0e92e5..4c0262e 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -548,14 +548,14 @@
PyErr_Restore(exc, val, tb);
}
else {
- PyObject *val2;
+ PyObject *exc2, *val2, *tb2;
+ PyErr_Fetch(&exc2, &val2, &tb2);
PyErr_NormalizeException(&exc, &val, &tb);
Py_DECREF(exc);
Py_XDECREF(tb);
- PyErr_Fetch(&exc, &val2, &tb);
- PyErr_NormalizeException(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc2, &val2, &tb2);
PyException_SetContext(val2, val);
- PyErr_Restore(exc, val2, tb);
+ PyErr_Restore(exc2, val2, tb2);
}
}