diff --git a/src/common/settings_setting.h b/src/common/settings_setting.h index a6fc88c0a3..0a9243cc0d 100644 --- a/src/common/settings_setting.h +++ b/src/common/settings_setting.h @@ -195,16 +195,22 @@ public: this->SetValue(this->GetDefault()); return; } - if constexpr (std::is_same_v) { - this->SetValue(input); - } else if constexpr (std::is_same_v>) { - this->SetValue(u32(std::strtoul(input.c_str(), nullptr, 10))); - } else if constexpr (std::is_same_v) { - this->SetValue(input == "true"); - } else if constexpr (std::is_same_v) { - this->SetValue(std::strtof(input.c_str(), nullptr)); - } else { - this->SetValue(Type(std::strtoll(input.c_str(), nullptr, 10))); + try { + if constexpr (std::is_same_v) { + this->SetValue(input); + } else if constexpr (std::is_same_v>) { + this->SetValue(u32(std::stoul(input))); + } else if constexpr (std::is_same_v) { + this->SetValue(input == "true"); + } else if constexpr (std::is_same_v) { + this->SetValue(std::stof(input)); + } else { + this->SetValue(Type(std::stoll(input))); + } + } catch (std::invalid_argument&) { + this->SetValue(this->GetDefault()); + } catch (std::out_of_range&) { + this->SetValue(this->GetDefault()); } }