aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2021-04-29 15:23:27 +0200
committerFabian Groffen <grobian@gentoo.org>2021-04-29 15:23:27 +0200
commit09b817763d3b03d9ccee92ddd4fa13edb82d53a9 (patch)
treea86571204f8510bafa84567008ba9012a45cbda8
parentq: show masking reason from comments when using -vv with -m (diff)
downloadportage-utils-09b817763d3b03d9ccee92ddd4fa13edb82d53a9.tar.gz
portage-utils-09b817763d3b03d9ccee92ddd4fa13edb82d53a9.tar.bz2
portage-utils-09b817763d3b03d9ccee92ddd4fa13edb82d53a9.zip
tree: avoid crash in tree_foreach_packages when category doesn't exist
This can be observed when reading a Packages file that refers to binpkgs that do not exist. Signed-off-by: Fabian Groffen <grobian@gentoo.org>
-rw-r--r--libq/tree.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libq/tree.c b/libq/tree.c
index a947735e..04bf4683 100644
--- a/libq/tree.c
+++ b/libq/tree.c
@@ -1375,6 +1375,16 @@ tree_foreach_packages(tree_ctx *ctx, tree_pkg_cb callback, void *priv)
tree_close_cat(cat);
}
pkg.cat_ctx = cat = tree_open_cat(ctx, atom->CATEGORY);
+ if (cat == NULL) {
+ /* probably dir doesn't exist or something, skip
+ * this one */
+ memset(&meta, 0, sizeof(meta));
+ if (len > 0) { /* hop over \n */
+ p++;
+ len--;
+ }
+ continue;
+ }
cat->pkg_ctxs = (tree_pkg_ctx **)atom; /* for name */
}
pkgnamelen = snprintf(pkgname, sizeof(pkgname),