diff options
author | Fabian Groffen <grobian@gentoo.org> | 2021-04-29 15:23:27 +0200 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2021-04-29 15:23:27 +0200 |
commit | 09b817763d3b03d9ccee92ddd4fa13edb82d53a9 (patch) | |
tree | a86571204f8510bafa84567008ba9012a45cbda8 | |
parent | q: show masking reason from comments when using -vv with -m (diff) | |
download | portage-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.c | 10 |
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), |