chain: ensure updateRwSetting doesn't update to a null settings

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
This commit is contained in:
ismaelsadeeq
2024-09-08 21:06:33 +01:00
parent c8e2eeeffb
commit df601993f2
2 changed files with 10 additions and 4 deletions

View File

@@ -819,10 +819,14 @@ public:
{
std::optional<interfaces::SettingsAction> action;
args().LockSettings([&](common::Settings& settings) {
auto* ptr_value = common::FindKey(settings.rw_settings, name);
// Create value if it doesn't exist
auto& value = ptr_value ? *ptr_value : settings.rw_settings[name];
action = update_settings_func(value);
if (auto* value = common::FindKey(settings.rw_settings, name)) {
action = update_settings_func(*value);
if (value->isNull()) settings.rw_settings.erase(name);
} else {
UniValue new_value;
action = update_settings_func(new_value);
if (!new_value.isNull()) settings.rw_settings[name] = std::move(new_value);
}
});
if (!action) return false;
// Now dump value to disk if requested