mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-20 14:05:23 +01:00
qt: Avoid crash on startup if int specified in settings.json
Fix GUI startup crash reported by Rspigler in https://github.com/bitcoin/bitcoin/issues/24457 that happens if settings.json contains an integer value for any of the configuration options which GUI settings can currently clash with (-dbcache, -par, -spendzeroconfchange, -signer, -upnp, -natpmp, -listen, -server, -proxy, -proxy, -onion, -onion, -lang, and -prune). Fix is a one-line change in ArgsManager::GetArg.
This commit is contained in:
parent
84b0973e35
commit
5b1aae12ca
3 changed files with 8 additions and 8 deletions
|
@ -15,15 +15,15 @@
|
|||
//! Entry point for BitcoinApplication tests.
|
||||
void OptionTests::optionTests()
|
||||
{
|
||||
// Test regression https://github.com/bitcoin/bitcoin/issues/24457. Check
|
||||
// if setting an integer prune value causes an exception to be thrown in
|
||||
// the OptionsModel constructor.
|
||||
// Test regression https://github.com/bitcoin/bitcoin/issues/24457. Ensure
|
||||
// that setting integer prune value doesn't cause an exception to be thrown
|
||||
// in the OptionsModel constructor
|
||||
gArgs.LockSettings([&](util::Settings& settings) {
|
||||
settings.forced_settings.erase("prune");
|
||||
settings.rw_settings["prune"] = 3814;
|
||||
});
|
||||
gArgs.WriteSettingsFile();
|
||||
QVERIFY_EXCEPTION_THROWN(OptionsModel{}, std::runtime_error);
|
||||
OptionsModel{};
|
||||
gArgs.LockSettings([&](util::Settings& settings) {
|
||||
settings.rw_settings.erase("prune");
|
||||
});
|
||||
|
|
|
@ -98,21 +98,21 @@ BOOST_AUTO_TEST_CASE(setting_args)
|
|||
|
||||
set_foo(99);
|
||||
BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "99");
|
||||
BOOST_CHECK_THROW(args.GetArg("foo", "default"), std::runtime_error);
|
||||
BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "99");
|
||||
BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 99);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", true), std::runtime_error);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", false), std::runtime_error);
|
||||
|
||||
set_foo(3.25);
|
||||
BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "3.25");
|
||||
BOOST_CHECK_THROW(args.GetArg("foo", "default"), std::runtime_error);
|
||||
BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "3.25");
|
||||
BOOST_CHECK_THROW(args.GetIntArg("foo", 100), std::runtime_error);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", true), std::runtime_error);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", false), std::runtime_error);
|
||||
|
||||
set_foo(0);
|
||||
BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "0");
|
||||
BOOST_CHECK_THROW(args.GetArg("foo", "default"), std::runtime_error);
|
||||
BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "0");
|
||||
BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 0);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", true), std::runtime_error);
|
||||
BOOST_CHECK_THROW(args.GetBoolArg("foo", false), std::runtime_error);
|
||||
|
|
|
@ -591,7 +591,7 @@ bool ArgsManager::IsArgNegated(const std::string& strArg) const
|
|||
std::string ArgsManager::GetArg(const std::string& strArg, const std::string& strDefault) const
|
||||
{
|
||||
const util::SettingsValue value = GetSetting(strArg);
|
||||
return value.isNull() ? strDefault : value.isFalse() ? "0" : value.isTrue() ? "1" : value.get_str();
|
||||
return value.isNull() ? strDefault : value.isFalse() ? "0" : value.isTrue() ? "1" : value.isNum() ? value.getValStr() : value.get_str();
|
||||
}
|
||||
|
||||
int64_t ArgsManager::GetIntArg(const std::string& strArg, int64_t nDefault) const
|
||||
|
|
Loading…
Add table
Reference in a new issue