From 7bd1336b3b1231ee1b41203932e18e049b04617f Mon Sep 17 00:00:00 2001 From: Al Date: Thu, 31 Dec 2015 01:46:04 -0500 Subject: [PATCH] [fix] Freeing languages in Python --- python/postal/pyexpand.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/python/postal/pyexpand.c b/python/postal/pyexpand.c index 851db6cc..3db8c207 100644 --- a/python/postal/pyexpand.c +++ b/python/postal/pyexpand.c @@ -138,12 +138,12 @@ static PyObject *py_expand(PyObject *self, PyObject *args, PyObject *keywords) { } char **languages = NULL; + size_t num_languages = 0; if (PySequence_Check(arg_languages)) { PyObject *seq = PySequence_Fast(arg_languages, "Expected a sequence"); Py_ssize_t len_languages = PySequence_Length(arg_languages); - size_t num_languages = 0; - + if (len_languages > 0) { languages = malloc(len_languages * sizeof(char *)); if (languages == NULL) { @@ -186,10 +186,13 @@ static PyObject *py_expand(PyObject *self, PyObject *args, PyObject *keywords) { if (num_languages > 0) { options.languages = languages; + options.num_languages = (int)num_languages; + } else { + free(languages); + languages = NULL; } } - options.num_languages = num_languages; Py_DECREF(seq); } @@ -204,6 +207,9 @@ static PyObject *py_expand(PyObject *self, PyObject *args, PyObject *keywords) { char **expansions = expand_address(input, options, &num_expansions); if (languages != NULL) { + for (int i = 0; i < num_languages; i++) { + free(languages[i]); + } free(languages); }