mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
Merge bitcoin/bitcoin#20772: fuzz: bolster ExtractDestination(s) checks
a29f522ba4
fuzz: bolster ExtractDestination(s) checks (Michael Dietz) Pull request description: ACKs for top commit: practicalswift: Tested ACKa29f522ba4
Tree-SHA512: 0fc194edb7b0fce77c7bb725fe65dec7976598edcd53882b5a0eb7cd83281a3ddcd2b3de00282468be659a7e5bc9991eb482816418f55b30e657cdc5a3bd7438
This commit is contained in:
commit
549d20a31b
1 changed files with 38 additions and 10 deletions
|
@ -55,22 +55,45 @@ FUZZ_TARGET_INIT(script, initialize_script)
|
|||
}
|
||||
|
||||
CTxDestination address;
|
||||
(void)ExtractDestination(script, address);
|
||||
|
||||
TxoutType type_ret;
|
||||
std::vector<CTxDestination> addresses;
|
||||
int required_ret;
|
||||
(void)ExtractDestinations(script, type_ret, addresses, required_ret);
|
||||
|
||||
const FlatSigningProvider signing_provider;
|
||||
(void)InferDescriptor(script, signing_provider);
|
||||
|
||||
(void)IsSegWitOutput(signing_provider, script);
|
||||
|
||||
(void)IsSolvable(signing_provider, script);
|
||||
bool extract_destinations_ret = ExtractDestinations(script, type_ret, addresses, required_ret);
|
||||
bool extract_destination_ret = ExtractDestination(script, address);
|
||||
if (!extract_destinations_ret) {
|
||||
assert(!extract_destination_ret);
|
||||
if (type_ret == TxoutType::MULTISIG) {
|
||||
assert(addresses.empty() && required_ret == 0);
|
||||
} else {
|
||||
assert(type_ret == TxoutType::PUBKEY ||
|
||||
type_ret == TxoutType::NONSTANDARD ||
|
||||
type_ret == TxoutType::NULL_DATA);
|
||||
}
|
||||
} else {
|
||||
assert(required_ret >= 1 && required_ret <= 16);
|
||||
assert((unsigned long)required_ret == addresses.size());
|
||||
assert(type_ret == TxoutType::MULTISIG || required_ret == 1);
|
||||
}
|
||||
if (type_ret == TxoutType::NONSTANDARD || type_ret == TxoutType::NULL_DATA) {
|
||||
assert(!extract_destinations_ret);
|
||||
}
|
||||
if (!extract_destination_ret) {
|
||||
assert(type_ret == TxoutType::PUBKEY ||
|
||||
type_ret == TxoutType::NONSTANDARD ||
|
||||
type_ret == TxoutType::NULL_DATA ||
|
||||
type_ret == TxoutType::MULTISIG);
|
||||
} else {
|
||||
assert(address == addresses[0]);
|
||||
}
|
||||
if (type_ret == TxoutType::NONSTANDARD ||
|
||||
type_ret == TxoutType::NULL_DATA ||
|
||||
type_ret == TxoutType::MULTISIG) {
|
||||
assert(!extract_destination_ret);
|
||||
}
|
||||
|
||||
TxoutType which_type;
|
||||
bool is_standard_ret = IsStandard(script, which_type);
|
||||
assert(type_ret == which_type);
|
||||
if (!is_standard_ret) {
|
||||
assert(which_type == TxoutType::NONSTANDARD ||
|
||||
which_type == TxoutType::NULL_DATA ||
|
||||
|
@ -87,6 +110,11 @@ FUZZ_TARGET_INIT(script, initialize_script)
|
|||
which_type == TxoutType::NONSTANDARD);
|
||||
}
|
||||
|
||||
const FlatSigningProvider signing_provider;
|
||||
(void)InferDescriptor(script, signing_provider);
|
||||
(void)IsSegWitOutput(signing_provider, script);
|
||||
(void)IsSolvable(signing_provider, script);
|
||||
|
||||
(void)RecursiveDynamicUsage(script);
|
||||
|
||||
std::vector<std::vector<unsigned char>> solutions;
|
||||
|
|
Loading…
Add table
Reference in a new issue