Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates-src > by-pkgid > 2d9391ec40a56cc992e635003e789762 > files > 6

libsolv-0.6.30-1.1.mga6.src.rpm

From 98a75959e13699e2ef35b0b011a88a6d224f227e Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Tue, 11 Dec 2018 10:14:04 +0100
Subject: [PATCH] Fix: Memory leaks

---
 ext/repo_rpmdb.c  | 16 ++++++++++++++++
 ext/testcase.c    |  4 ++++
 tools/repo2solv.c |  1 +
 3 files changed, 21 insertions(+)

--- a/ext/repo_rpmdb.c
+++ b/ext/repo_rpmdb.c
@@ -1939,6 +1939,8 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (fread(lead, 96 + 16, 1, fp) != 1 || getu32(lead) != 0xedabeedb)
     {
       pool_error(pool, -1, "%s: not a rpm", rpm);
+      solv_chksum_free(leadsigchksumh, NULL);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
@@ -1951,12 +1953,16 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (lead[78] != 0 || lead[79] != 5)
     {
       pool_error(pool, -1, "%s: not a rpm v5 header", rpm);
+      solv_chksum_free(leadsigchksumh, NULL);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
   if (getu32(lead + 96) != 0x8eade801)
     {
       pool_error(pool, -1, "%s: bad signature header", rpm);
+      solv_chksum_free(leadsigchksumh, NULL);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
@@ -1965,6 +1971,8 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (sigcnt >= MAX_SIG_CNT || sigdsize >= MAX_SIG_DSIZE)
     {
       pool_error(pool, -1, "%s: bad signature header", rpm);
+      solv_chksum_free(leadsigchksumh, NULL);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
@@ -2014,6 +2024,8 @@ repo_add_rpm(Repo *repo, const char *rpm
 	  if (fread(lead, l, 1, fp) != 1)
 	    {
 	      pool_error(pool, -1, "%s: unexpected EOF", rpm);
+          solv_chksum_free(leadsigchksumh, NULL);
+          solv_chksum_free(chksumh, NULL);
 	      fclose(fp);
 	      return 0;
 	    }
@@ -2034,6 +2046,7 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (fread(lead, 16, 1, fp) != 1)
     {
       pool_error(pool, -1, "%s: unexpected EOF", rpm);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
@@ -2042,6 +2055,7 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (getu32(lead) != 0x8eade801)
     {
       pool_error(pool, -1, "%s: bad header", rpm);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
@@ -2050,6 +2064,7 @@ repo_add_rpm(Repo *repo, const char *rpm
   if (sigcnt >= MAX_HDR_CNT || sigdsize >= MAX_HDR_DSIZE)
     {
       pool_error(pool, -1, "%s: bad header", rpm);
+      solv_chksum_free(chksumh, NULL);
       fclose(fp);
       return 0;
     }
--- a/ext/testcase.c
+++ b/ext/testcase.c
@@ -2348,6 +2348,7 @@ testcase_write_mangled(Solver *solv, con
 	  if (fclose(fp))
 	    {
 	      pool_error(solv->pool, 0, "testcase_write: write error");
+	      solv_free(result);
 	      strqueue_free(&sq);
 	      return 0;
 	    }
@@ -2360,12 +2361,14 @@ testcase_write_mangled(Solver *solv, con
   if (!(fp = fopen(out, "w")))
     {
       pool_error(solv->pool, 0, "testcase_write: could not open '%s' for writing", out);
+      solv_free(cmd);
       strqueue_free(&sq);
       return 0;
     }
   if (*cmd && fwrite(cmd, strlen(cmd), 1, fp) != 1)
     {
       pool_error(solv->pool, 0, "testcase_write: write error");
+      solv_free(cmd);
       strqueue_free(&sq);
       fclose(fp);
       return 0;
@@ -2373,6 +2376,7 @@ testcase_write_mangled(Solver *solv, con
   if (fclose(fp))
     {
       pool_error(solv->pool, 0, "testcase_write: write error");
+      solv_free(cmd);
       strqueue_free(&sq);
       return 0;
     }