Fix error handling when instantiating `std::regex`

This commit is contained in:
Martchus 2021-07-07 19:09:32 +02:00
parent 17c5f50440
commit d006c9ce4f
2 changed files with 11 additions and 2 deletions

View File

@ -273,7 +273,11 @@ void getPackages(const Params &params, ResponseHandler &&handler)
break; break;
case Mode::Regex: case Mode::Regex:
// assume names are regexes // 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; break;
case Mode::Provides: case Mode::Provides:
case Mode::Depends: case Mode::Depends:

View File

@ -112,7 +112,12 @@ int main(int argc, const char *argv[])
const auto negate = negateArg.isPresent(); const auto negate = negateArg.isPresent();
auto regex = std::optional<std::regex>(); auto regex = std::optional<std::regex>();
if (regexArg.isPresent()) { 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 Database &db : cfg.databases) {
for (const auto &pkg : db.packages) { for (const auto &pkg : db.packages) {