commit: 5996186e46b4ae4156b2b9bf4ebc022e7039a02f
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 19 16:36:56 2020 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Jan 19 16:36:56 2020 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=5996186e
qmanifest: fix Coverity 206559 Resource leak
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qmanifest.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/qmanifest.c b/qmanifest.c
index d9452a4..de4bf9b 100644
--- a/qmanifest.c
+++ b/qmanifest.c
@@ -570,6 +570,7 @@ generate_dir(const char *dir, enum type_manifest mtype)
} else if (mtype == CATEGORY_MANIFEST) {
const char *mfest;
gzFile mf;
+ const char *ret = str_manifest_gz;
snprintf(path, sizeof(path), "%s/%s", dir, str_manifest_gz);
if ((mf = gzopen(path, "wb9")) == NULL) {
@@ -596,13 +597,13 @@ generate_dir(const char *dir, enum type_manifest mtype)
if (mfest == NULL) {
fprintf(stderr, "generating
Manifest for %s failed!\n",
path);
- gzclose(mf);
- return NULL;
+ tv[0].tv_sec = 0;
+ ret = NULL;
+ } else {
+ snprintf(path, sizeof(path),
"%s/%s",
+ dentries[i],
mfest);
+ write_hashes(tv, dir, path,
"MANIFEST", NULL, mf);
}
-
- snprintf(path, sizeof(path), "%s/%s",
- dentries[i], mfest);
- write_hashes(tv, dir, path, "MANIFEST",
NULL, mf);
} else if (s.st_mode & S_IFREG) {
write_hashes(tv, dir, dentries[i],
"DATA", NULL, mf);
} /* ignore other "things" (like symlinks) as
they
@@ -624,7 +625,7 @@ generate_dir(const char *dir, enum type_manifest mtype)
utimes(dir, tv);
}
- return str_manifest_gz;
+ return ret;
} else if (mtype == EBUILD_MANIFEST) {
char newmanifest[8192];
FILE *m;