From 2e63b73a2cd0d7d560c762a4ae4ed5b2fd5eb7ea Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Thu, 2 Mar 2006 18:34:57 +0000 Subject: [PATCH] Fix refleak in PyErr_Display(). --- Python/pythonrun.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a98c85ac10d..1b2b829c3d6 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1115,6 +1115,7 @@ void PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) err = PyFile_WriteString("", f); else { char* modstr = PyString_AsString(moduleName); + Py_DECREF(moduleName); if (modstr && strcmp(modstr, "exceptions")) { err = PyFile_WriteString(modstr, f); @@ -1130,21 +1131,19 @@ void PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) } else err = PyFile_WriteObject(exception, f, Py_PRINT_RAW); - if (err == 0) { - if (value != Py_None) { - PyObject *s = PyObject_Str(value); - /* only print colon if the str() of the - object is not the empty string - */ - if (s == NULL) - err = -1; - else if (!PyString_Check(s) || - PyString_GET_SIZE(s) != 0) - err = PyFile_WriteString(": ", f); - if (err == 0) - err = PyFile_WriteObject(s, f, Py_PRINT_RAW); - Py_XDECREF(s); - } + if (err == 0 && (value != Py_None)) { + PyObject *s = PyObject_Str(value); + /* only print colon if the str() of the + object is not the empty string + */ + if (s == NULL) + err = -1; + else if (!PyString_Check(s) || + PyString_GET_SIZE(s) != 0) + err = PyFile_WriteString(": ", f); + if (err == 0) + err = PyFile_WriteObject(s, f, Py_PRINT_RAW); + Py_XDECREF(s); } if (err == 0) err = PyFile_WriteString("\n", f);