From 70db7976d6ca0e6a4140269f21a66c14f6c177ab Mon Sep 17 00:00:00 2001
From: Karolina Surma <ksurma@redhat.com>
Date: Thu, 29 May 2025 17:31:45 +0200
Subject: [PATCH] Avoid Python reference leaks

---
 python/rpmarchive-py.c | 11 +++++++++--
 python/rpmfiles-py.c   |  1 +
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/python/rpmarchive-py.c b/python/rpmarchive-py.c
index b8b9515cf..294fabcf2 100644
--- a/python/rpmarchive-py.c
+++ b/python/rpmarchive-py.c
@@ -138,12 +138,16 @@ static PyObject *rpmarchive_readto(rpmarchiveObject *s,
 	return NULL;
     }
 
-    if (s->archive == NULL)
+    if (s->archive == NULL) {
+	Py_DECREF(fdo);
 	return rpmarchive_closed();
+    }
+
 
     Py_BEGIN_ALLOW_THREADS
     rc = rpmfiArchiveReadToFile(s->archive, rpmfdGetFd(fdo), nodigest);
     Py_END_ALLOW_THREADS
+    Py_DECREF(fdo);
 
     if (rc)
 	return rpmarchive_error(rc);
@@ -163,12 +167,15 @@ static PyObject *rpmarchive_writeto(rpmarchiveObject *s,
 	return NULL;
     }
 
-    if (s->archive == NULL)
+    if (s->archive == NULL) {
+	Py_DECREF(fdo);
 	return rpmarchive_closed();
+    }
 
     Py_BEGIN_ALLOW_THREADS
     rc = rpmfiArchiveWriteFile(s->archive, rpmfdGetFd(fdo));
     Py_END_ALLOW_THREADS
+    Py_DECREF(fdo);
 
     if (rc)
 	return rpmarchive_error(rc);
diff --git a/python/rpmfiles-py.c b/python/rpmfiles-py.c
index 2c0845d7b..fb40a7b3e 100644
--- a/python/rpmfiles-py.c
+++ b/python/rpmfiles-py.c
@@ -464,6 +464,7 @@ static PyObject *rpmfiles_archive(rpmfilesObject *s,
     } else {
 	archive = rpmfiNewArchiveReader(fd, s->files, RPMFI_ITER_READ_ARCHIVE);
     }
+    Py_DECREF(fdo);
 
     return rpmarchive_Wrap(&rpmarchive_Type, s->files, archive);
 }
-- 
2.33.0