[Python-checkins] cpython (3.4): PyErr_NormalizeException doesn't like being called with an exception set

serhiy.storchaka python-checkins at python.org
Wed Jun 11 06:20:07 CEST 2014


http://hg.python.org/cpython/rev/a98fd4eeed40
changeset:   91123:a98fd4eeed40
branch:      3.4
parent:      91119:b841b80e6421
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed Jun 11 07:18:53 2014 +0300
summary:
  PyErr_NormalizeException doesn't like being called with an exception set
(issues #21677, #21310).

files:
  Modules/_io/_iomodule.c  |  8 ++++----
  Modules/_io/bufferedio.c |  8 ++++----
  Modules/_io/textio.c     |  8 ++++----
  3 files changed, 12 insertions(+), 12 deletions(-)


diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -470,14 +470,14 @@
         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);
     }
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
--- 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);
         }
     }
 
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -2613,14 +2613,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);
             }
         }
         return res;

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list