]> granicus.if.org Git - python/commitdiff
PyErr_NormalizeException doesn't like being called with an exception set
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 11 Jun 2014 04:18:53 +0000 (07:18 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 11 Jun 2014 04:18:53 +0000 (07:18 +0300)
(issues #21677, #21310).

Modules/_io/_iomodule.c
Modules/_io/bufferedio.c
Modules/_io/textio.c

index 1dbd563e2c69e959f784230e67e0d9fa3752c2bc..660ff1fe58ed6be2f0ecfa13a11bfe9dcea51be4 100644 (file)
@@ -470,14 +470,14 @@ io_open(PyObject *self, PyObject *args, PyObject *kwds)
         if (_PyObject_CallMethodId(result, &PyId_close, NULL) != NULL)
             PyErr_Restore(exc, val, tb);
         else {
-            PyObject *val2;
+            PyObject *exc2, *val2, *tb2;
+            PyErr_Fetch(&exc2, &val2, &tb2);
             PyErr_NormalizeException(&exc, &val, &tb);
             Py_XDECREF(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);
         }
         Py_DECREF(result);
     }
index d0e92e5f7f129f9fcb4520e965701eb8ba25589e..4c0262e25a23be56c64266f7543edc41389c83f2 100644 (file)
@@ -548,14 +548,14 @@ buffered_close(buffered *self, PyObject *args)
             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);
         }
     }
 
index 55392b435f283a688ee43cb6cd21d1fcda5a5f98..635093efff95b606d7b74a84ab9bf579f1336552 100644 (file)
@@ -2613,14 +2613,14 @@ textiowrapper_close(textio *self, PyObject *args)
                 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);
             }
         }
         return res;