|
14 | 14 |
|
15 | 15 | #include <memory>
|
16 | 16 |
|
| 17 | +std::vector<uint8_t> ConstructPubKeyBytes(FuzzedDataProvider& fuzzed_data_provider, Span<const uint8_t> byte_data, const bool compressed) noexcept |
| 18 | +{ |
| 19 | + uint8_t pk_type; |
| 20 | + if (compressed) { |
| 21 | + pk_type = fuzzed_data_provider.PickValueInArray({0x02, 0x03}); |
| 22 | + } else { |
| 23 | + pk_type = fuzzed_data_provider.PickValueInArray({0x04, 0x06, 0x07}); |
| 24 | + } |
| 25 | + std::vector<uint8_t> pk_data{byte_data.begin(), byte_data.begin() + (compressed ? CPubKey::COMPRESSED_SIZE : CPubKey::SIZE)}; |
| 26 | + pk_data[0] = pk_type; |
| 27 | + return pk_data; |
| 28 | +} |
| 29 | + |
17 | 30 | CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider, const std::optional<CAmount>& max) noexcept
|
18 | 31 | {
|
19 | 32 | return fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(0, max.value_or(MAX_MONEY));
|
@@ -103,16 +116,12 @@ CScript ConsumeScript(FuzzedDataProvider& fuzzed_data_provider, const bool maybe
|
103 | 116 | // navigate the highly structured multisig format.
|
104 | 117 | r_script << fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(0, 22);
|
105 | 118 | int num_data{fuzzed_data_provider.ConsumeIntegralInRange(1, 22)};
|
106 |
| - std::vector<uint8_t> pubkey_comp{buffer.begin(), buffer.begin() + CPubKey::COMPRESSED_SIZE}; |
107 |
| - pubkey_comp.front() = fuzzed_data_provider.ConsumeIntegralInRange(2, 3); // Set first byte for GetLen() to pass |
108 |
| - std::vector<uint8_t> pubkey_uncomp{buffer.begin(), buffer.begin() + CPubKey::SIZE}; |
109 |
| - pubkey_uncomp.front() = fuzzed_data_provider.ConsumeIntegralInRange(4, 7); // Set first byte for GetLen() to pass |
110 | 119 | while (num_data--) {
|
111 |
| - auto& pubkey{fuzzed_data_provider.ConsumeBool() ? pubkey_uncomp : pubkey_comp}; |
| 120 | + auto pubkey_bytes{ConstructPubKeyBytes(fuzzed_data_provider, buffer, fuzzed_data_provider.ConsumeBool())}; |
112 | 121 | if (fuzzed_data_provider.ConsumeBool()) {
|
113 |
| - pubkey.back() = num_data; // Make each pubkey different |
| 122 | + pubkey_bytes.back() = num_data; // Make each pubkey different |
114 | 123 | }
|
115 |
| - r_script << pubkey; |
| 124 | + r_script << pubkey_bytes; |
116 | 125 | }
|
117 | 126 | r_script << fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(0, 22);
|
118 | 127 | },
|
|
0 commit comments