From 115b93298d939bf11ed96b0d1cea23565b56bed4 Mon Sep 17 00:00:00 2001 From: undertome <39058018+undertome@users.noreply.github.com> Date: Thu, 24 Feb 2022 17:58:46 -0600 Subject: [PATCH] Make DOSGuard config loading more resilient (#103) --- src/webserver/DOSGuard.h | 44 ++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/webserver/DOSGuard.h b/src/webserver/DOSGuard.h index 17b5c075..2a5c0f5f 100644 --- a/src/webserver/DOSGuard.h +++ b/src/webserver/DOSGuard.h @@ -29,8 +29,14 @@ class DOSGuard std::string const& key, std::uint32_t const fallback) const { - if (auto const c = getConfig(config); c) - return c->at(key).as_int64(); + try + { + if (auto const c = getConfig(config)) + return c->at(key).as_int64(); + } + catch (std::exception const& e) + { + } return fallback; } @@ -40,22 +46,26 @@ class DOSGuard { using T = std::unordered_set const; - auto const& c = getConfig(config); - if (!c) + try + { + auto const& c = getConfig(config); + if (!c) + return T(); + + auto const& w = c->at("whitelist").as_array(); + + auto const transform = [](auto const& elem) { + return std::string(elem.as_string().c_str()); + }; + + return T( + boost::transform_iterator(w.begin(), transform), + boost::transform_iterator(w.end(), transform)); + } + catch (std::exception const& e) + { return T(); - - if (!c->contains("whitelist")) - return T(); - - auto const& w = c->at("whitelist").as_array(); - - auto const transform = [](auto const& elem) { - return std::string(elem.as_string().c_str()); - }; - - return T( - boost::transform_iterator(w.begin(), transform), - boost::transform_iterator(w.end(), transform)); + } } public: