From: <md...@us...> - 2007-12-12 19:16:46
|
Revision: 4715 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4715&view=rev Author: mdboom Date: 2007-12-12 11:15:46 -0800 (Wed, 12 Dec 2007) Log Message: ----------- Merged revisions 4707-4714 via svnmerge from http://matplotlib.svn.sf.net/svnroot/matplotlib/trunk/matplotlib ........ r4707 | mdboom | 2007-12-12 09:52:01 -0500 (Wed, 12 Dec 2007) | 2 lines Support fontconfig syntax in Text constructor. ........ r4713 | mdboom | 2007-12-12 14:07:03 -0500 (Wed, 12 Dec 2007) | 2 lines Fix reference-counting leak when saving an Agg Png to a file-like object. ........ Modified Paths: -------------- branches/transforms/src/_backend_agg.cpp Property Changed: ---------------- branches/transforms/ Property changes on: branches/transforms ___________________________________________________________________ Name: svnmerge-integrated - /trunk/matplotlib:1-4706 + /trunk/matplotlib:1-4714 Modified: branches/transforms/src/_backend_agg.cpp =================================================================== --- branches/transforms/src/_backend_agg.cpp 2007-12-12 19:11:44 UTC (rev 4714) +++ branches/transforms/src/_backend_agg.cpp 2007-12-12 19:15:46 UTC (rev 4715) @@ -1289,17 +1289,21 @@ static void write_png_data(png_structp png_ptr, png_bytep data, png_size_t length) { PyObject* py_file_obj = (PyObject*)png_get_io_ptr(png_ptr); PyObject* write_method = PyObject_GetAttrString(py_file_obj, "write"); - PyObject_CallFunction(write_method, "s#", data, length); - - // MGDTODO: Check NULL on failure + PyObject* result = NULL; + if (write_method) + result = PyObject_CallFunction(write_method, "s#", data, length); + Py_XDECREF(write_method); + Py_XDECREF(result); } static void flush_png_data(png_structp png_ptr) { PyObject* py_file_obj = (PyObject*)png_get_io_ptr(png_ptr); PyObject* flush_method = PyObject_GetAttrString(py_file_obj, "flush"); - if (flush_method) { - PyObject_CallFunction(flush_method, ""); - } + PyObject* result = NULL; + if (flush_method) + result = PyObject_CallFunction(flush_method, ""); + Py_XDECREF(flush_method); + Py_XDECREF(result); } // this code is heavily adapted from the paint license, which is in @@ -1322,8 +1326,11 @@ } else { PyObject* write_method = PyObject_GetAttrString(py_fileobj.ptr(), "write"); - if (!(write_method && PyCallable_Check(write_method))) + if (!(write_method && PyCallable_Check(write_method))) { + Py_XDECREF(write_method); throw Py::TypeError("Object does not appear to be a path or a Python file-like object"); + } + Py_XDECREF(write_method); } png_bytep *row_pointers = NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |