From a8b548d75d9a376c9bb66e06bb918c876416d615 Mon Sep 17 00:00:00 2001 From: brunoerg Date: Wed, 8 Jan 2025 12:26:44 -0300 Subject: [PATCH] test: `getdescriptorinfo`/`importdescriptors` with whitespace in pubkeys --- test/functional/rpc_getdescriptorinfo.py | 7 +++++++ test/functional/wallet_importdescriptors.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/test/functional/rpc_getdescriptorinfo.py b/test/functional/rpc_getdescriptorinfo.py index e4e6d6f0f3..65aa6dd47c 100755 --- a/test/functional/rpc_getdescriptorinfo.py +++ b/test/functional/rpc_getdescriptorinfo.py @@ -11,6 +11,7 @@ from test_framework.util import ( assert_equal, assert_raises_rpc_error, ) +from test_framework.wallet_util import generate_keypair class DescriptorTest(BitcoinTestFramework): @@ -36,6 +37,12 @@ class DescriptorTest(BitcoinTestFramework): assert_raises_rpc_error(-1, 'getdescriptorinfo', self.nodes[0].getdescriptorinfo) assert_raises_rpc_error(-3, 'JSON value of type number is not of expected type string', self.nodes[0].getdescriptorinfo, 1) assert_raises_rpc_error(-5, "'' is not a valid descriptor function", self.nodes[0].getdescriptorinfo, "") + assert_raises_rpc_error(-5, "pk(): Key ' 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' is invalid due to whitespace", self.nodes[0].getdescriptorinfo, "pk( 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798)") + assert_raises_rpc_error(-5, "pk(): Key '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 ' is invalid due to whitespace", self.nodes[0].getdescriptorinfo, "pk(0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 )") + assert_raises_rpc_error(-5, "Multi: Key ' 03a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7' is invalid due to whitespace", self.nodes[0].getdescriptorinfo, "wsh(multi(2, 03a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7,03774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb,03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a))") + assert_raises_rpc_error(-5, "Multi: Key ' 03774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb' is invalid due to whitespace", self.nodes[0].getdescriptorinfo, "wsh(multi(2,03a0434d9e47f3c86235477c7b1ae6ae5d3442d49b1943c2b752a68e2a47e247c7, 03774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb,03d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a))") + priv_key = generate_keypair(wif=True)[0] + assert_raises_rpc_error(-5, f"pk(): Key ' {priv_key}' is invalid due to whitespace", self.nodes[0].getdescriptorinfo, f"pk( {priv_key})") # P2PK output with the specified public key. self.test_desc('pk(0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798)', isrange=False, issolvable=True, hasprivatekeys=False) diff --git a/test/functional/wallet_importdescriptors.py b/test/functional/wallet_importdescriptors.py index 84c07b6a28..5aabd5db33 100755 --- a/test/functional/wallet_importdescriptors.py +++ b/test/functional/wallet_importdescriptors.py @@ -129,6 +129,20 @@ class ImportDescriptorsTest(BitcoinTestFramework): assert_equal(info["ismine"], True) assert_equal(info["ischange"], True) + self.log.info("Should not import a descriptor with an invalid public key due to whitespace") + self.test_importdesc({"desc": descsum_create("pkh( " + key.pubkey + ")"), + "timestamp": "now", + "internal": True}, + error_code=-5, + error_message=f"pkh(): Key ' {key.pubkey}' is invalid due to whitespace", + success=False) + self.test_importdesc({"desc": descsum_create("pkh(" + key.pubkey + " )"), + "timestamp": "now", + "internal": True}, + error_code=-5, + error_message=f"pkh(): Key '{key.pubkey} ' is invalid due to whitespace", + success=False) + # # Test importing of a P2SH-P2WPKH descriptor key = get_generate_key() self.log.info("Should not import a p2sh-p2wpkh descriptor without checksum")