diff --git a/src/_backend_agg.cpp b/src/_backend_agg.cpp index c35a9da93cbb..416a3991f4ad 100644 --- a/src/_backend_agg.cpp +++ b/src/_backend_agg.cpp @@ -1557,6 +1557,7 @@ RendererAgg::_draw_path_collection_generic if ((Nfacecolors == 0 && Nedgecolors == 0) || Npaths == 0) { + Py_XDECREF(transforms_arr); return Py::Object(); } @@ -1708,6 +1709,8 @@ RendererAgg::_draw_path_collection_generic } } + Py_XDECREF(transforms_arr); + return Py::Object(); } @@ -2383,11 +2386,7 @@ RendererAgg::tostring_rgba_minimized(const Py::Tuple& args) int newwidth = 0; int newheight = 0; - #if PY3K - Py::Bytes data; - #else - Py::String data; - #endif + PyObject *data; if (xmin < xmax && ymin < ymax) { @@ -2406,18 +2405,12 @@ RendererAgg::tostring_rgba_minimized(const Py::Tuple& args) // the _AsString() API. unsigned int* dst; - #if PY3K - data = Py::Bytes(static_cast(NULL), (int) newsize); - dst = reinterpret_cast(PyBytes_AsString(data.ptr())); - #else - data = Py::String(static_cast(NULL), (int) newsize); - dst = reinterpret_cast(PyString_AsString(data.ptr())); - #endif - - if (dst == NULL) + data = PyBytes_FromStringAndSize(NULL, newsize); + if (data == NULL) { throw Py::MemoryError("RendererAgg::tostring_minimized could not allocate memory"); } + dst = (unsigned int *)PyBytes_AsString(data); unsigned int* src = (unsigned int*)pixBuffer; for (int y = ymin; y < ymax; ++y) @@ -2436,7 +2429,8 @@ RendererAgg::tostring_rgba_minimized(const Py::Tuple& args) bounds[3] = Py::Int(newheight); Py::Tuple result(2); - result[0] = data; + result[0] = Py::Object(data, false); + Py_DECREF(data); result[1] = bounds; return result; diff --git a/src/_image.cpp b/src/_image.cpp index b1c59e9674ba..73f2624c772c 100644 --- a/src/_image.cpp +++ b/src/_image.cpp @@ -1264,7 +1264,7 @@ _image_module::frombuffer(const Py::Tuple& args) args.verify_length(4); - PyObject *bufin = new_reference_to(args[0]); + PyObject *bufin = args[0].ptr(); size_t x = (long)Py::Int(args[1]); size_t y = (long)Py::Int(args[2]);