aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz/coins_view.cpp
diff options
context:
space:
mode:
authorMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2023-11-07 17:46:41 +0100
committerMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2023-11-08 09:51:54 +0100
commitfabb5046a7365af3079e6e45606d63576bc6ad12 (patch)
treedce6f141f2ca1eea95d39c1973c2cc98cace6e41 /src/test/fuzz/coins_view.cpp
parent82ea4e787c791acbc85fd3043dd6bae038cba4f2 (diff)
downloadbitcoin-fabb5046a7365af3079e6e45606d63576bc6ad12.tar.xz
fuzz: Avoid timeout and bloat in fuzz targets
Also, fix iwyu
Diffstat (limited to 'src/test/fuzz/coins_view.cpp')
-rw-r--r--src/test/fuzz/coins_view.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/test/fuzz/coins_view.cpp b/src/test/fuzz/coins_view.cpp
index b088aa0bd7..1a8570ee8f 100644
--- a/src/test/fuzz/coins_view.cpp
+++ b/src/test/fuzz/coins_view.cpp
@@ -2,26 +2,28 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#include <chainparams.h>
#include <coins.h>
#include <consensus/amount.h>
#include <consensus/tx_check.h>
#include <consensus/tx_verify.h>
#include <consensus/validation.h>
-#include <key.h>
#include <policy/policy.h>
#include <primitives/transaction.h>
-#include <pubkey.h>
+#include <script/interpreter.h>
#include <test/fuzz/FuzzedDataProvider.h>
#include <test/fuzz/fuzz.h>
#include <test/fuzz/util.h>
#include <test/util/setup_common.h>
-#include <validation.h>
+#include <util/hasher.h>
+#include <cassert>
#include <cstdint>
#include <limits>
+#include <memory>
#include <optional>
+#include <stdexcept>
#include <string>
+#include <utility>
#include <vector>
namespace {
@@ -44,12 +46,15 @@ void initialize_coins_view()
FUZZ_TARGET(coins_view, .init = initialize_coins_view)
{
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
+ bool good_data{true};
+
CCoinsView backend_coins_view;
CCoinsViewCache coins_view_cache{&backend_coins_view, /*deterministic=*/true};
COutPoint random_out_point;
Coin random_coin;
CMutableTransaction random_mutable_transaction;
- LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
+ LIMITED_WHILE(good_data && fuzzed_data_provider.ConsumeBool(), 10'000)
+ {
CallOneOf(
fuzzed_data_provider,
[&] {
@@ -95,6 +100,7 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
[&] {
const std::optional<COutPoint> opt_out_point = ConsumeDeserializable<COutPoint>(fuzzed_data_provider);
if (!opt_out_point) {
+ good_data = false;
return;
}
random_out_point = *opt_out_point;
@@ -102,6 +108,7 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
[&] {
const std::optional<Coin> opt_coin = ConsumeDeserializable<Coin>(fuzzed_data_provider);
if (!opt_coin) {
+ good_data = false;
return;
}
random_coin = *opt_coin;
@@ -109,6 +116,7 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
[&] {
const std::optional<CMutableTransaction> opt_mutable_transaction = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider);
if (!opt_mutable_transaction) {
+ good_data = false;
return;
}
random_mutable_transaction = *opt_mutable_transaction;
@@ -116,7 +124,8 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
[&] {
CCoinsMapMemoryResource resource;
CCoinsMap coins_map{0, SaltedOutpointHasher{/*deterministic=*/true}, CCoinsMap::key_equal{}, &resource};
- LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
+ LIMITED_WHILE(good_data && fuzzed_data_provider.ConsumeBool(), 10'000)
+ {
CCoinsCacheEntry coins_cache_entry;
coins_cache_entry.flags = fuzzed_data_provider.ConsumeIntegral<unsigned char>();
if (fuzzed_data_provider.ConsumeBool()) {
@@ -124,6 +133,7 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
} else {
const std::optional<Coin> opt_coin = ConsumeDeserializable<Coin>(fuzzed_data_provider);
if (!opt_coin) {
+ good_data = false;
return;
}
coins_cache_entry.coin = *opt_coin;