From 2104282ddde8e7a86965a149f82cd3c3ac35c014 Mon Sep 17 00:00:00 2001 From: Chandra Pratap Date: Sun, 7 Dec 2025 08:42:54 +0000 Subject: [PATCH] fuzz: Add tests for CCoinControl methods The `ccoincontrol` fuzzer misses tests for a number of CCoinControl operations. Add them. --- src/wallet/test/fuzz/coincontrol.cpp | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/wallet/test/fuzz/coincontrol.cpp b/src/wallet/test/fuzz/coincontrol.cpp index e46a469f9ea..870eab89490 100644 --- a/src/wallet/test/fuzz/coincontrol.cpp +++ b/src/wallet/test/fuzz/coincontrol.cpp @@ -99,6 +99,46 @@ FUZZ_TARGET(coincontrol, .init = initialize_coincontrol) const bool is_selected = coin_control.IsSelected(out_point); assert(!coin_control.GetInputWeight(out_point) || is_selected); assert(!coin_control.GetSequence(out_point) || is_selected); + }, + [&] { + const auto scripts = coin_control.GetScripts(out_point); + assert(coin_control.IsSelected(out_point) || (!scripts.first && !scripts.second)); + }, + [&] { + assert(coin_control.HasSelectedOrder() || !coin_control.GetSelectionPos(out_point)); + }, + [&] { + assert(!coin_control.GetSelectionPos(out_point) || coin_control.IsSelected(out_point)); + }, + [&] { + auto& input = coin_control.Select(out_point); + uint32_t sequence{fuzzed_data_provider.ConsumeIntegral()}; + input.SetSequence(sequence); + assert(input.GetSequence() == sequence); + assert(coin_control.GetSequence(out_point) == sequence); + }, + [&] { + auto& input = coin_control.Select(out_point); + const CScript script{ConsumeScript(fuzzed_data_provider)}; + input.SetScriptSig(script); + assert(input.HasScripts()); + assert(input.GetScripts().first == script); + assert(coin_control.GetScripts(out_point).first == script); + }, + [&] { + auto& input = coin_control.Select(out_point); + const CScriptWitness script_wit{ConsumeScriptWitness(fuzzed_data_provider)}; + input.SetScriptWitness(script_wit); + assert(input.HasScripts()); + assert(input.GetScripts().second->stack == script_wit.stack); + assert(coin_control.GetScripts(out_point).second->stack == script_wit.stack); + }, + [&] { + auto& input = coin_control.Select(out_point); + unsigned int pos{fuzzed_data_provider.ConsumeIntegral()}; + input.SetPosition(pos); + assert(input.GetPosition() == pos); + assert(coin_control.GetSelectionPos(out_point) == pos); }); } }