Projects
Factory:RISC-V:Base
rpm
_service:tar_scm:backport-Fix-fileleak-and-meml...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-Fix-fileleak-and-memleak-in-rpmInstall.patch of Package rpm
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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2