From d006c9ce4f24548a052be7e07804e6339a28458f Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 7 Jul 2021 19:09:32 +0200 Subject: [PATCH] Fix error handling when instantiating `std::regex` --- librepomgr/webapi/routes.cpp | 6 +++++- pacfind/main.cpp | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/librepomgr/webapi/routes.cpp b/librepomgr/webapi/routes.cpp index 81972db..ed99ee6 100644 --- a/librepomgr/webapi/routes.cpp +++ b/librepomgr/webapi/routes.cpp @@ -273,7 +273,11 @@ void getPackages(const Params ¶ms, ResponseHandler &&handler) break; case Mode::Regex: // assume names are regexes - pushPackages(params.setup.config.findPackages(std::regex(name.data(), name.size()))); + try { + pushPackages(params.setup.config.findPackages(std::regex(name.data(), name.size()))); + } catch (const std::regex_error &e) { + throw BadRequest(argsToString("regex is invalid: ", e.what())); + } break; case Mode::Provides: case Mode::Depends: diff --git a/pacfind/main.cpp b/pacfind/main.cpp index 19206e5..6ba72bb 100644 --- a/pacfind/main.cpp +++ b/pacfind/main.cpp @@ -112,7 +112,12 @@ int main(int argc, const char *argv[]) const auto negate = negateArg.isPresent(); auto regex = std::optional(); if (regexArg.isPresent()) { - regex = std::regex(searchTerm, std::regex::egrep); + try { + regex = std::regex(searchTerm, std::regex::egrep); + } catch (const std::regex_error &e) { + cerr << "Specified regex is invalid: " << e.what() << endl; + exit(3); + } } for (const Database &db : cfg.databases) { for (const auto &pkg : db.packages) {