Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/rpm-software-management/createrepo_c.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Alley <dalley@redhat.com>2020-11-01 07:12:48 +0300
committeramatej <matej.ales@seznam.cz>2020-11-05 14:21:13 +0300
commita91cf762554aaf48b4e6c5b4e23d50ecefb36cee (patch)
tree592fdd8d9dec4f532582a7b32cf2e977b640e6cc
parenta5bad29b3f760ad482acb01a88b7eb968246efb3 (diff)
Fix leaks triggered by locate_metadata tests
-rw-r--r--src/python/locate_metadata-py.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/python/locate_metadata-py.c b/src/python/locate_metadata-py.c
index f27de0f..99997d7 100644
--- a/src/python/locate_metadata-py.c
+++ b/src/python/locate_metadata-py.c
@@ -143,6 +143,9 @@ getitem(_MetadataLocationObject *self, PyObject *pykey)
}
pykey = PyObject_ToPyBytesOrNull(pykey);
+ if (!pykey) {
+ return NULL;
+ }
key = PyBytes_AsString(pykey);
value = NULL;
@@ -179,8 +182,19 @@ getitem(_MetadataLocationObject *self, PyObject *pykey)
} else if (!strcmp(key, "additional_metadata")){
if (self->ml->additional_metadata){
PyObject *list = PyList_New(0);
+ if (!list) {
+ Py_XDECREF(pykey);
+ return NULL;
+ }
for (GSList *elem = self->ml->additional_metadata; elem; elem=g_slist_next(elem)){
- PyList_Append(list, PyUnicode_FromString(((cr_Metadatum *)(elem->data))->name));
+ PyObject *namestr = PyUnicode_FromString(((cr_Metadatum *)(elem->data))->name);
+ if (!namestr || PyList_Append(list, namestr)) {
+ Py_DECREF(list);
+ Py_XDECREF(pykey);
+ return NULL;
+ } else {
+ Py_DECREF(namestr);
+ }
}
Py_XDECREF(pykey);
return list;