From 3ced28473c27efe64527e37e7244f430e16ce31b Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Fri, 30 Oct 2015 10:18:10 -0400 Subject: [PATCH] Fix memory leaks found by memleak_hawaii3.py --- src/_path.h | 1 - src/_path_wrapper.cpp | 11 ++++++++--- src/ft2font_wrapper.cpp | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/_path.h b/src/_path.h index 48d61af5be12..55dfd2f72be7 100644 --- a/src/_path.h +++ b/src/_path.h @@ -1136,7 +1136,6 @@ int convert_to_string(PathIterator &path, *buffersize = path.total_vertices() * (precision + 5) * 4; if (*buffersize == 0) { - *buffer = NULL; return 0; } diff --git a/src/_path_wrapper.cpp b/src/_path_wrapper.cpp index 8500bab586bf..98947e24f1c4 100644 --- a/src/_path_wrapper.cpp +++ b/src/_path_wrapper.cpp @@ -638,8 +638,9 @@ static PyObject *Py_convert_to_string(PyObject *self, PyObject *args, PyObject * PyObject *codesobj; char *codes[5]; int postfix; - char *buffer; + char *buffer = NULL; size_t buffersize; + PyObject *result; int status; if (!PyArg_ParseTuple(args, @@ -702,10 +703,14 @@ static PyObject *Py_convert_to_string(PyObject *self, PyObject *args, PyObject * } if (buffersize == 0) { - return PyBytes_FromString(""); + result = PyBytes_FromString(""); } else { - return PyBytes_FromStringAndSize(buffer, buffersize); + result = PyBytes_FromStringAndSize(buffer, buffersize); } + + free(buffer); + + return result; } extern "C" { diff --git a/src/ft2font_wrapper.cpp b/src/ft2font_wrapper.cpp index c2fd95798959..2521346372e2 100644 --- a/src/ft2font_wrapper.cpp +++ b/src/ft2font_wrapper.cpp @@ -1032,6 +1032,8 @@ static PyObject *PyFT2Font_get_name_index(PyFT2Font *self, PyObject *args, PyObj CALL_CPP("get_name_index", name_index = self->x->get_name_index(glyphname)); + PyMem_Free(glyphname); + return PyLong_FromLong(name_index); } @@ -1085,6 +1087,8 @@ static PyObject *PyFT2Font_get_sfnt_table(PyFT2Font *self, PyObject *args, PyObj } } + PyMem_Free(tagname); + void *table = FT_Get_Sfnt_Table(self->x->get_face(), (FT_Sfnt_Tag)tag); if (!table) { Py_RETURN_NONE;