commit: db5cb274ad76778091619b8c7e38a7c0134d5a04
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 25 09:44:18 2020 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sat Jan 25 09:44:18 2020 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=db5cb274
qpkg: try to fix Coverity 206549 Time of check, time of use
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qpkg.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/qpkg.c b/qpkg.c
index 1535f05..6aa5f76 100644
--- a/qpkg.c
+++ b/qpkg.c
@@ -271,17 +271,25 @@ qpkg_make(depend_atom *atom)
xpak_argv[1] = NULL;
xpak_create(AT_FDCWD, tbz2, 1, xpak_argv, 1, verbose);
+ if ((i = open(tbz2, O_WRONLY | O_APPEND)) < 0) {
+ warnp("failed to open '%s': %s", tbz2, strerror(errno));
+ free(buf);
+ return 1;
+ }
+
/* calculate the number of bytes taken by the xpak archive */
- if (stat(tbz2, &st) == -1) {
+ if (fstat(i, &st) == -1) {
warnp("could not stat '%s': %s", tbz2, strerror(errno));
+ close(i);
free(buf);
return 1;
}
xpaksize = st.st_size - xpaksize;
/* save tbz2 tail: OOOOSTOP */
- if ((fp = fopen(tbz2, "a")) == NULL) {
+ if ((fp = fdopen(i, "a")) == NULL) {
warnp("could not open '%s': %s", tbz2, strerror(errno));
+ close(i);
free(buf);
return 1;
}
@@ -294,8 +302,7 @@ qpkg_make(depend_atom *atom)
unlink(filelist);
/* create dirs, if necessary */
- snprintf(buf, buflen, "%s/%s",
- qpkg_bindir, atom->CATEGORY);
+ snprintf(buf, buflen, "%s/%s", qpkg_bindir, atom->CATEGORY);
mkdir_p(buf, 0755);
snprintf(buf, buflen, "%s/%s/%s.tbz2",