Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: /
Date: Sat, 25 Jan 2020 09:45:18
Message-Id: 1579945458.db5cb274ad76778091619b8c7e38a7c0134d5a04.grobian@gentoo
1 commit: db5cb274ad76778091619b8c7e38a7c0134d5a04
2 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
3 AuthorDate: Sat Jan 25 09:44:18 2020 +0000
4 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
5 CommitDate: Sat Jan 25 09:44:18 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=db5cb274
7
8 qpkg: try to fix Coverity 206549 Time of check, time of use
9
10 Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
11
12 qpkg.c | 15 +++++++++++----
13 1 file changed, 11 insertions(+), 4 deletions(-)
14
15 diff --git a/qpkg.c b/qpkg.c
16 index 1535f05..6aa5f76 100644
17 --- a/qpkg.c
18 +++ b/qpkg.c
19 @@ -271,17 +271,25 @@ qpkg_make(depend_atom *atom)
20 xpak_argv[1] = NULL;
21 xpak_create(AT_FDCWD, tbz2, 1, xpak_argv, 1, verbose);
22
23 + if ((i = open(tbz2, O_WRONLY | O_APPEND)) < 0) {
24 + warnp("failed to open '%s': %s", tbz2, strerror(errno));
25 + free(buf);
26 + return 1;
27 + }
28 +
29 /* calculate the number of bytes taken by the xpak archive */
30 - if (stat(tbz2, &st) == -1) {
31 + if (fstat(i, &st) == -1) {
32 warnp("could not stat '%s': %s", tbz2, strerror(errno));
33 + close(i);
34 free(buf);
35 return 1;
36 }
37 xpaksize = st.st_size - xpaksize;
38
39 /* save tbz2 tail: OOOOSTOP */
40 - if ((fp = fopen(tbz2, "a")) == NULL) {
41 + if ((fp = fdopen(i, "a")) == NULL) {
42 warnp("could not open '%s': %s", tbz2, strerror(errno));
43 + close(i);
44 free(buf);
45 return 1;
46 }
47 @@ -294,8 +302,7 @@ qpkg_make(depend_atom *atom)
48 unlink(filelist);
49
50 /* create dirs, if necessary */
51 - snprintf(buf, buflen, "%s/%s",
52 - qpkg_bindir, atom->CATEGORY);
53 + snprintf(buf, buflen, "%s/%s", qpkg_bindir, atom->CATEGORY);
54 mkdir_p(buf, 0755);
55
56 snprintf(buf, buflen, "%s/%s/%s.tbz2",