]> granicus.if.org Git - python/commitdiff
Don't decref exc too soon
authorNick Coghlan <ncoghlan@gmail.com>
Fri, 15 Nov 2013 14:34:13 +0000 (00:34 +1000)
committerNick Coghlan <ncoghlan@gmail.com>
Fri, 15 Nov 2013 14:34:13 +0000 (00:34 +1000)
Objects/exceptions.c

index bb61ea5a3c6090aa8c59df8837a5140234adb096..3476db02dfca91b340a1d66947235fe660bab37f 100644 (file)
@@ -2685,7 +2685,6 @@ _PyErr_TrySetFromCause(const char *format, ...)
      * state potentially stored on OSError instances.
      */
 
-    Py_DECREF(exc);
     Py_XDECREF(tb);
 
 #ifdef HAVE_STDARG_PROTOTYPES
@@ -2696,12 +2695,14 @@ _PyErr_TrySetFromCause(const char *format, ...)
     msg_prefix = PyUnicode_FromFormatV(format, vargs);
     va_end(vargs);
     if (msg_prefix == NULL) {
+        Py_DECREF(exc);
         Py_DECREF(val);
         return NULL;
     }
 
     PyErr_Format(exc, "%U (%s: %S)",
                  msg_prefix, Py_TYPE(val)->tp_name, val);
+    Py_DECREF(exc);
     Py_DECREF(msg_prefix);
     PyErr_Fetch(&new_exc, &new_val, &new_tb);
     PyErr_NormalizeException(&new_exc, &new_val, &new_tb);