@@ -94,30 +94,30 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
9494 LOCK (wallet.cs_wallet );
9595 wallet.SetWalletFlag (WALLET_FLAG_DESCRIPTORS);
9696 wallet.SetLastBlockProcessed (chainstate.m_chain .Height (), chainstate.m_chain .Tip ()->GetBlockHash ());
97- wallet.m_keypool_size = 10 ;
97+ wallet.m_keypool_size = 1 ;
9898 }
9999
100100 auto wallet_desc{CreateWalletDescriptor (fuzzed_data_provider)};
101101 if (!wallet_desc.has_value ()) return ;
102102 auto spk_manager{CreateDescriptor (wallet_desc->first , wallet_desc->second , wallet)};
103103 if (spk_manager == nullptr ) return ;
104104
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+
105117 bool good_data{true };
106- LIMITED_WHILE (good_data && fuzzed_data_provider.ConsumeBool (), 300 ) {
118+ LIMITED_WHILE (good_data && fuzzed_data_provider.ConsumeBool (), 20 ) {
107119 CallOneOf (
108120 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- },
121121 [&] {
122122 const CScript script{ConsumeScript (fuzzed_data_provider)};
123123 auto is_mine{spk_manager->IsMine (script)};
@@ -144,29 +144,11 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
144144 },
145145 [&] {
146146 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);
151150 }
152151 },
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- },
170152 [&] {
171153 LOCK (spk_manager->cs_desc_man );
172154 auto wallet_desc{spk_manager->GetWalletDescriptor ()};
@@ -209,6 +191,8 @@ FUZZ_TARGET(scriptpubkeyman, .init = initialize_spkm)
209191 );
210192 }
211193
194+ std::string descriptor;
195+ (void )spk_manager->GetDescriptorString (descriptor, /* priv=*/ fuzzed_data_provider.ConsumeBool ());
212196 (void )spk_manager->GetEndRange ();
213197 (void )spk_manager->GetKeyPoolSize ();
214198}
0 commit comments