# HG changeset patch # User Benjamin Peterson # Date 1384404589 18000 # Node ID c27237d57231a6386184bbc3fc4bac3e687453e6 # Parent e0fb41d416426447da6f6137bf93899c8d5a4440 fix refleaks diff --git a/Objects/exceptions.c b/Objects/exceptions.c --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -2683,6 +2683,9 @@ * state potentially stored on OSError instances. */ + Py_DECREF(exc); + Py_XDECREF(tb); + #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else @@ -2690,13 +2693,14 @@ #endif msg_prefix = PyUnicode_FromFormatV(format, vargs); va_end(vargs); - if (msg_prefix == NULL) + if (msg_prefix == NULL) { + Py_DECREF(val); return NULL; + } PyErr_Format(exc, "%U (%s: %S)", msg_prefix, Py_TYPE(val)->tp_name, val); - Py_DECREF(exc); - Py_XDECREF(tb); + Py_DECREF(msg_prefix); PyErr_Fetch(&new_exc, &new_val, &new_tb); PyErr_NormalizeException(&new_exc, &new_val, &new_tb); PyException_SetCause(new_val, val);