From a3c253d03c490334f401e6d0605959b2c1e0ab5e Mon Sep 17 00:00:00 2001 From: Juan RP Date: Tue, 3 Jun 2014 12:50:34 +0200 Subject: [PATCH] xbps-query: check regcomp() return value. --- bin/xbps-query/ownedby.c | 6 ++++-- bin/xbps-query/search.c | 10 +++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/bin/xbps-query/ownedby.c b/bin/xbps-query/ownedby.c index 062a24bf..ec7b904b 100644 --- a/bin/xbps-query/ownedby.c +++ b/bin/xbps-query/ownedby.c @@ -73,7 +73,8 @@ match_files_by_pattern(xbps_dictionary_t pkg_filesd, if (filestr == NULL) continue; if (ffd->regex) { - regcomp(®ex, ffd->pat, REG_EXTENDED|REG_NOSUB); + if (regcomp(®ex, ffd->pat, REG_EXTENDED|REG_NOSUB) != 0) + return; if (regexec(®ex, filestr, 0, 0, 0) == 0) { printf("%s: %s (%s)\n", pkgver, filestr, typestr); } @@ -131,7 +132,8 @@ repo_match_cb(struct xbps_handle *xhp _unused, for (unsigned int i = 0; i < xbps_array_count(obj); i++) { xbps_array_get_cstring_nocopy(obj, i, &filestr); if (ffd->regex) { - regcomp(®ex, ffd->pat, REG_EXTENDED|REG_NOSUB); + if (regcomp(®ex, ffd->pat, REG_EXTENDED|REG_NOSUB) != 0) + return errno; if (regexec(®ex, filestr, 0, 0, 0) == 0) { printf("%s: %s (%s)\n", key, filestr, ffd->repouri); } diff --git a/bin/xbps-query/search.c b/bin/xbps-query/search.c index 1896f2df..ceef468c 100644 --- a/bin/xbps-query/search.c +++ b/bin/xbps-query/search.c @@ -116,7 +116,9 @@ search_array_cb(struct xbps_handle *xhp _unused, vpkgfound = true; if (sd->regex) { - regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB); + if (regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB) != 0) + return errno; + if ((regexec(®ex, pkgver, 0, 0, 0) == 0) || (regexec(®ex, desc, 0, 0, 0) == 0)) { xbps_array_add_cstring_nocopy(sd->results, pkgver); @@ -140,7 +142,8 @@ search_array_cb(struct xbps_handle *xhp _unused, for (unsigned int i = 0; i < xbps_array_count(obj2); i++) { xbps_array_get_cstring_nocopy(obj2, i, &str); if (sd->regex) { - regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB); + if (regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB) != 0) + return errno; if (regexec(®ex, str, 0, 0, 0) == 0) { xbps_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver); printf("%s: %s (%s)\n", pkgver, str, sd->repourl); @@ -162,7 +165,8 @@ search_array_cb(struct xbps_handle *xhp _unused, /* property is a string */ str = xbps_string_cstring_nocopy(obj2); if (sd->regex) { - regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB); + if (regcomp(®ex, sd->pat, REG_EXTENDED|REG_NOSUB) != 0) + return errno; if (regexec(®ex, str, 0, 0, 0) == 0) { xbps_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver); printf("%s: %s (%s)\n", pkgver, str, sd->repourl);