[fix] Freeing languages in Python
This commit is contained in:
@@ -138,12 +138,12 @@ static PyObject *py_expand(PyObject *self, PyObject *args, PyObject *keywords) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char **languages = NULL;
|
char **languages = NULL;
|
||||||
|
size_t num_languages = 0;
|
||||||
|
|
||||||
if (PySequence_Check(arg_languages)) {
|
if (PySequence_Check(arg_languages)) {
|
||||||
PyObject *seq = PySequence_Fast(arg_languages, "Expected a sequence");
|
PyObject *seq = PySequence_Fast(arg_languages, "Expected a sequence");
|
||||||
Py_ssize_t len_languages = PySequence_Length(arg_languages);
|
Py_ssize_t len_languages = PySequence_Length(arg_languages);
|
||||||
size_t num_languages = 0;
|
|
||||||
|
|
||||||
if (len_languages > 0) {
|
if (len_languages > 0) {
|
||||||
languages = malloc(len_languages * sizeof(char *));
|
languages = malloc(len_languages * sizeof(char *));
|
||||||
if (languages == NULL) {
|
if (languages == NULL) {
|
||||||
@@ -186,10 +186,13 @@ static PyObject *py_expand(PyObject *self, PyObject *args, PyObject *keywords) {
|
|||||||
|
|
||||||
if (num_languages > 0) {
|
if (num_languages > 0) {
|
||||||
options.languages = languages;
|
options.languages = languages;
|
||||||
|
options.num_languages = (int)num_languages;
|
||||||
|
} else {
|
||||||
|
free(languages);
|
||||||
|
languages = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
options.num_languages = num_languages;
|
|
||||||
|
|
||||||
Py_DECREF(seq);
|
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);
|
char **expansions = expand_address(input, options, &num_expansions);
|
||||||
|
|
||||||
if (languages != NULL) {
|
if (languages != NULL) {
|
||||||
|
for (int i = 0; i < num_languages; i++) {
|
||||||
|
free(languages[i]);
|
||||||
|
}
|
||||||
free(languages);
|
free(languages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user