diff --git a/electrum/wizard.py b/electrum/wizard.py index 48a3cee9f..689454974 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -679,6 +679,11 @@ class NewWalletWizard(KeystoreWizard): addresses[addr] = {'type': txin_type, 'pubkey': pubkey} elif 'address_list' in data: for addr in data['address_list'].split(): + assert isinstance(addr, str) + assert bitcoin.is_address(addr), f"expected bitcoin addr. got {addr[:5] + '..' + addr[-2:]}" + # note: we do not normalize addresses. :/ + # In particular, bech32 addresses can be either all-lowercase or all-uppercase. + # TODO we should normalize them, but it only makes sense if we also do a walletDB-upgrade. addresses[addr] = {} elif data['keystore_type'] in ['createseed', 'haveseed']: seed_extension = data['seed_extra_words'] if data['seed_extend'] else '' diff --git a/tests/test_wizard.py b/tests/test_wizard.py index 95ba511e5..a494245f2 100644 --- a/tests/test_wizard.py +++ b/tests/test_wizard.py @@ -789,11 +789,27 @@ class WalletWizardTestCase(WizardTestCase): { "14gcRovpkCoGkCNBivQBvw7eso7eiNAbxG", "35ZqQJcBQMZ1rsv8aSuJ2wkC7ohUCQMJbT", - "BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4", + "BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4", # TODO normalize to lowercase? "bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kt5nd6y", }, ) + async def test_create_imported_wallet_from_addresses__invalid_input(self): + w = self._wizard_for(wallet_type='imported') + v = w._current + d = v.wizard_data + self.assertEqual('imported', v.view) + + d.update({ + 'address_list': + 'garbagegarbage\n' + '35ZqQJcBQMZ1rsv8aSuJ2wkC7ohUCQMJbT\n' + }) + v = w.resolve_next(v.view, d) + with self.assertRaises(AssertionError) as ctx: + wallet = self._set_password_and_check_address(v=v, w=w, recv_addr=None) + self.assertTrue("expected bitcoin addr" in ctx.exception.args[0]) + async def test_create_imported_wallet_from_wif_keys(self): w = self._wizard_for(wallet_type='imported') v = w._current