Merge fb52023ee6 into merged_master (Bitcoin PR bitcoin/bitcoin#30684)

This commit is contained in:
ivanlele 2026-03-25 12:22:42 +00:00
commit ffc2d3af4b
No known key found for this signature in database
3 changed files with 40 additions and 0 deletions

View file

@ -77,6 +77,11 @@ bool VerifyWallets(WalletContext& context)
std::set<fs::path> wallet_paths;
for (const auto& wallet : chain.getSettingsList("wallet")) {
if (!wallet.isStr()) {
chain.initError(_("Invalid value detected for '-wallet' or '-nowallet'. "
"'-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets"));
return false;
}
const auto& wallet_file = wallet.get_str();
const fs::path path = fsbridge::AbsPathJoin(GetWalletDir(), fs::PathFromString(wallet_file));
@ -110,6 +115,11 @@ bool LoadWallets(WalletContext& context)
try {
std::set<fs::path> wallet_paths;
for (const auto& wallet : chain.getSettingsList("wallet")) {
if (!wallet.isStr()) {
chain.initError(_("Invalid value detected for '-wallet' or '-nowallet'. "
"'-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets"));
return false;
}
const auto& name = wallet.get_str();
if (!wallet_paths.insert(fs::PathFromString(name)).second) {
continue;

View file

@ -154,6 +154,13 @@ class ConfArgsTest(BitcoinTestFramework):
expected_msg='Error: Error parsing command line arguments: Can not set -proxy with no value. Please specify value with -proxy=value.',
extra_args=['-proxy'],
)
# Provide a value different from 1 to the -wallet negated option
if self.is_wallet_compiled():
for value in [0, 'not_a_boolean']:
self.nodes[0].assert_start_raises_init_error(
expected_msg="Error: Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets",
extra_args=[f'-nowallet={value}'],
)
def test_log_buffer(self):
self.stop_node(0)

View file

@ -13,11 +13,32 @@ from test_framework.util import assert_equal
class SettingsTest(BitcoinTestFramework):
def add_options(self, parser):
self.add_wallet_options(parser)
def set_test_params(self):
self.setup_clean_chain = True
self.num_nodes = 1
self.wallet_names = []
def test_wallet_settings(self, settings_path):
if not self.is_wallet_compiled():
return
self.log.info("Testing wallet settings..")
node = self.nodes[0]
# Create wallet to use it during tests
self.start_node(0)
node.createwallet(wallet_name='w1')
self.stop_node(0)
# Verify wallet settings can only be strings. Either names or paths. Not booleans, nums nor anything else.
for wallets_data in [[10], [True], [[]], [{}], ["w1", 10], ["w1", False]]:
with settings_path.open("w") as fp:
json.dump({"wallet": wallets_data}, fp)
node.assert_start_raises_init_error(expected_msg="Error: Invalid value detected for '-wallet' or '-nowallet'. '-wallet' requires a string value, while '-nowallet' accepts only '1' to disable all wallets",
extra_args=[f'-settings={settings_path}'])
def run_test(self):
node, = self.nodes
settings = node.chain_path / "settings.json"
@ -86,6 +107,8 @@ class SettingsTest(BitcoinTestFramework):
self.start_node(0, extra_args=[f"-settings={altsettings}"])
self.stop_node(0)
self.test_wallet_settings(settings)
if __name__ == '__main__':
SettingsTest(__file__).main()