@@ -94,30 +94,30 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
94
94
LOCK (wallet.cs_wallet );
95
95
wallet.SetWalletFlag (WALLET_FLAG_DESCRIPTORS);
96
96
wallet.SetLastBlockProcessed (chainstate.m_chain .Height (), chainstate.m_chain .Tip ()->GetBlockHash ());
97
- wallet.m_keypool_size = 10 ;
97
+ wallet.m_keypool_size = 1 ;
98
98
}
99
99
100
100
auto wallet_desc{CreateWalletDescriptor (fuzzed_data_provider)};
101
101
if (!wallet_desc.has_value ()) return ;
102
102
auto spk_manager{CreateDescriptor (wallet_desc->first , wallet_desc->second , wallet)};
103
103
if (spk_manager == nullptr ) return ;
104
104
105
+ if (fuzzed_data_provider.ConsumeBool ()) {
106
+ auto wallet_desc{CreateWalletDescriptor (fuzzed_data_provider)};
107
+ if (!wallet_desc.has_value ()) {
108
+ return ;
109
+ }
110
+ std::string error;
111
+ if (spk_manager->CanUpdateToWalletDescriptor (wallet_desc->first , error)) {
112
+ auto new_spk_manager{CreateDescriptor (wallet_desc->first , wallet_desc->second , wallet)};
113
+ if (new_spk_manager != nullptr ) spk_manager = new_spk_manager;
114
+ }
115
+ }
116
+
105
117
bool good_data{true };
106
- LIMITED_WHILE (good_data && fuzzed_data_provider.ConsumeBool (), 300 ) {
118
+ LIMITED_WHILE (good_data && fuzzed_data_provider.ConsumeBool (), 20 ) {
107
119
CallOneOf (
108
120
fuzzed_data_provider,
109
- [&] {
110
- auto wallet_desc{CreateWalletDescriptor (fuzzed_data_provider)};
111
- if (!wallet_desc.has_value ()) {
112
- good_data = false ;
113
- return ;
114
- }
115
- std::string error;
116
- if (spk_manager->CanUpdateToWalletDescriptor (wallet_desc->first , error)) {
117
- auto new_spk_manager{CreateDescriptor (wallet_desc->first , wallet_desc->second , wallet)};
118
- if (new_spk_manager != nullptr ) spk_manager = new_spk_manager;
119
- }
120
- },
121
121
[&] {
122
122
const CScript script{ConsumeScript (fuzzed_data_provider)};
123
123
auto is_mine{spk_manager->IsMine (script)};
@@ -144,29 +144,11 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
144
144
},
145
145
[&] {
146
146
auto spks{spk_manager->GetScriptPubKeys ()};
147
- for (const CScript& spk : spks) {
148
- if (fuzzed_data_provider.ConsumeBool ()) {
149
- spk_manager->MarkUnusedAddresses (spk);
150
- }
147
+ if (!spks.empty ()) {
148
+ auto & spk{PickValue (fuzzed_data_provider, spks)};
149
+ (void )spk_manager->MarkUnusedAddresses (spk);
151
150
}
152
151
},
153
- [&] {
154
- CKey key{ConsumePrivateKey (fuzzed_data_provider, /* compressed=*/ fuzzed_data_provider.ConsumeBool ())};
155
- if (!key.IsValid ()) {
156
- good_data = false ;
157
- return ;
158
- }
159
- spk_manager->AddDescriptorKey (key, key.GetPubKey ());
160
- spk_manager->TopUp ();
161
- LOCK (spk_manager->cs_desc_man );
162
- auto particular_key{spk_manager->GetKey (key.GetPubKey ().GetID ())};
163
- assert (*particular_key == key);
164
- assert (spk_manager->HasPrivKey (key.GetPubKey ().GetID ()));
165
- },
166
- [&] {
167
- std::string descriptor;
168
- (void )spk_manager->GetDescriptorString (descriptor, /* priv=*/ fuzzed_data_provider.ConsumeBool ());
169
- },
170
152
[&] {
171
153
LOCK (spk_manager->cs_desc_man );
172
154
auto wallet_desc{spk_manager->GetWalletDescriptor ()};
@@ -209,6 +191,8 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
209
191
);
210
192
}
211
193
194
+ std::string descriptor;
195
+ (void )spk_manager->GetDescriptorString (descriptor, /* priv=*/ fuzzed_data_provider.ConsumeBool ());
212
196
(void )spk_manager->GetEndRange ();
213
197
(void )spk_manager->GetKeyPoolSize ();
214
198
}
0 commit comments