From: Nick Coghlan Date: Fri, 15 Nov 2013 14:34:13 +0000 (+1000) Subject: Don't decref exc too soon X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b9b936429c8d013b0e954d0a4d30832e6354439;p=python Don't decref exc too soon --- diff --git a/Objects/exceptions.c b/Objects/exceptions.c index bb61ea5a3c..3476db02df 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -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);