commit:     af1d54e9a8bf517e566091a8c60762ebfcb534d7
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  2 13:07:45 2024 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Tue Jan  2 13:07:45 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=af1d54e9

qmerge: fix Coverity 190455 Argument cannot be negative

Handle case where image dir somehow could not be opened.

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qmerge.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/qmerge.c b/qmerge.c
index b16b4b5..8924a37 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -1411,10 +1411,12 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
                int imagefd = open("image", O_RDONLY);
                size_t masklen = strlen(install_mask) + 1 +
                                15 + 1 + 14 + 1 + 14 + 1 + 1;  /* worst case 
scenario */
-               char *imask = xmalloc(masklen);
+               char *imask;
                size_t maskp;
 
-               if (fstat(imagefd, &st) == -1) {
+               if (imagefd == -1) {
+                       err("Failed to open image dir");
+               } else if (fstat(imagefd, &st) == -1) {
                        close(imagefd);
                        err("Cannot stat image dirfd");
                } else if (eprefix != NULL && eprefix[0] == '/') {
@@ -1425,6 +1427,7 @@ pkg_merge(int level, const depend_atom *qatom, const 
tree_match_ctx *mpkg)
                        }
                }
 
+               imask = xmalloc(masklen);
                /* rely on INSTALL_MASK code to remove optional dirs */
                maskp = snprintf(imask, masklen, "%s ", install_mask);
                if (contains_set("noinfo", features))

Reply via email to