64 lines
1.9 KiB
Diff
64 lines
1.9 KiB
Diff
From f0f983b145583eeed618cf3cbc5d39bedd8af5a5 Mon Sep 17 00:00:00 2001
|
|
From: xujing <xujing125@huawei.com>
|
|
Date: Mon, 28 Nov 2022 11:19:20 +0800
|
|
Subject: [PATCH 2/3] Fix fileleak and memleak in rpmInstall
|
|
|
|
The "*eiu->fnp" from "eiu->pkgURL[eiu->pkgx]" which is alloced. when
|
|
Fopen or rpmReadPackageFile fails in tryReadHeader, "*eiu->fnp" is
|
|
set to NULL but not freed. In addition, if "eiu->pkgState[eiu->pkgx]"
|
|
is set, the file is leaked too. Fix it.
|
|
|
|
Only resource free is added, no other logic change.
|
|
---
|
|
lib/rpminstall.c | 12 +++++++++---
|
|
1 file changed, 9 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/lib/rpminstall.c b/lib/rpminstall.c
|
|
index b392cf1c3..90474fabf 100644
|
|
--- a/lib/rpminstall.c
|
|
+++ b/lib/rpminstall.c
|
|
@@ -355,7 +355,6 @@ static int tryReadHeader(rpmts ts, struct rpmEIU * eiu, Header * hdrp)
|
|
fd = NULL;
|
|
}
|
|
eiu->numFailed++;
|
|
- *eiu->fnp = NULL;
|
|
return RPMRC_FAIL;
|
|
}
|
|
|
|
@@ -371,7 +370,6 @@ static int tryReadHeader(rpmts ts, struct rpmEIU * eiu, Header * hdrp)
|
|
if (eiu->rpmrc == RPMRC_FAIL) {
|
|
rpmlog(RPMLOG_ERR, _("%s cannot be installed\n"), *eiu->fnp);
|
|
eiu->numFailed++;
|
|
- *eiu->fnp = NULL;
|
|
}
|
|
|
|
return RPMRC_OK;
|
|
@@ -554,8 +552,12 @@ restart:
|
|
rpmlog(RPMLOG_DEBUG, "============== %s\n", *eiu->fnp);
|
|
(void) urlPath(*eiu->fnp, &fileName);
|
|
|
|
- if (tryReadHeader(ts, eiu, &h) == RPMRC_FAIL)
|
|
+ if (tryReadHeader(ts, eiu, &h) == RPMRC_FAIL) {
|
|
+ if (eiu->pkgState[eiu->fnp - eiu->pkgURL] == 1)
|
|
+ (void) unlink(*eiu->fnp);
|
|
+ *eiu->fnp = _free(*eiu->fnp);
|
|
continue;
|
|
+ }
|
|
|
|
if (eiu->rpmrc == RPMRC_NOTFOUND) {
|
|
rc = tryReadManifest(eiu);
|
|
@@ -564,6 +566,10 @@ restart:
|
|
headerFree(h);
|
|
goto restart;
|
|
}
|
|
+ } else if (eiu->rpmrc == RPMRC_FAIL) {
|
|
+ if (eiu->pkgState[eiu->fnp - eiu->pkgURL] == 1)
|
|
+ (void) unlink(*eiu->fnp);
|
|
+ *eiu->fnp = _free(*eiu->fnp);
|
|
}
|
|
|
|
if (headerIsSource(h)) {
|
|
--
|
|
2.27.0
|
|
|