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", |