Coverage Report

Created: 2025-05-14 12:32

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/root/bitcoin/src/test/fuzz/fuzz.h
Line
Count
Source
1
// Copyright (c) 2009-2021 The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#ifndef BITCOIN_TEST_FUZZ_FUZZ_H
6
#define BITCOIN_TEST_FUZZ_FUZZ_H
7
8
#include <cstdint>
9
#include <functional>
10
#include <span>
11
#include <string_view>
12
13
/**
14
 * Can be used to limit a theoretically unbounded loop. This caps the runtime
15
 * to avoid timeouts or OOMs.
16
 *
17
 * This can be used in combination with a check in the condition to confirm
18
 * whether the fuzz engine provided "good" data. If the fuzz input contains
19
 * invalid data, the loop aborts early. This will teach the fuzz engine to look
20
 * for useful data and avoids bloating the fuzz input folder with useless data.
21
 */
22
#define LIMITED_WHILE(condition, limit) \
23
1.17M
    for (unsigned _count{limit}; (condition) && _count; --_count)
24
25
using FuzzBufferType = std::span<const uint8_t>;
26
27
using TypeTestOneInput = std::function<void(FuzzBufferType)>;
28
struct FuzzTargetOptions {
29
0
    std::function<void()> init{[] {}};
30
    bool hidden{false};
31
};
32
33
void FuzzFrameworkRegisterTarget(std::string_view name, TypeTestOneInput target, FuzzTargetOptions opts);
34
35
#define FUZZ_TARGET(...) DETAIL_FUZZ(__VA_ARGS__)
36
37
#define DETAIL_FUZZ(name, ...)                                                        \
38
    void name##_fuzz_target(FuzzBufferType);                                          \
39
    struct name##_Before_Main {                                                       \
40
        name##_Before_Main()                                                          \
41
0
        {                                                                             \
42
0
            FuzzFrameworkRegisterTarget(#name, name##_fuzz_target, {__VA_ARGS__});    \
43
0
        }                                                                             \
Unexecuted instantiation: _ZN29addition_overflow_Before_MainC2Ev
Unexecuted instantiation: _ZN32data_stream_addr_man_Before_MainC2Ev
Unexecuted instantiation: _ZN19addrman_Before_MainC2Ev
Unexecuted instantiation: _ZN28addrman_serdeser_Before_MainC2Ev
Unexecuted instantiation: _ZN17asmap_Before_MainC2Ev
Unexecuted instantiation: _ZN24asmap_direct_Before_MainC2Ev
Unexecuted instantiation: _ZN20autofile_Before_MainC2Ev
Unexecuted instantiation: _ZN18banman_Before_MainC2Ev
Unexecuted instantiation: _ZN32base58_encode_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN37base58check_encode_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN32base32_encode_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN32base64_encode_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN30psbt_base64_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN32bech32_random_decode_Before_MainC2Ev
Unexecuted instantiation: _ZN28bech32_roundtrip_Before_MainC2Ev
Unexecuted instantiation: _ZN35bip324_cipher_roundtrip_Before_MainC2Ev
Unexecuted instantiation: _ZN20bitdeque_Before_MainC2Ev
Unexecuted instantiation: _ZN18bitset_Before_MainC2Ev
Unexecuted instantiation: _ZN17block_Before_MainC2Ev
Unexecuted instantiation: _ZN24block_header_Before_MainC2Ev
Unexecuted instantiation: _ZN23block_index_Before_MainC2Ev
Unexecuted instantiation: _ZN23blockfilter_Before_MainC2Ev
Unexecuted instantiation: _ZN24bloom_filter_Before_MainC2Ev
Unexecuted instantiation: _ZN25buffered_file_Before_MainC2Ev
Unexecuted instantiation: _ZN17chain_Before_MainC2Ev
Unexecuted instantiation: _ZN22checkqueue_Before_MainC2Ev
Unexecuted instantiation: _ZN35clusterlin_depgraph_sim_Before_MainC2Ev
Unexecuted instantiation: _ZN45clusterlin_depgraph_serialization_Before_MainC2Ev
Unexecuted instantiation: _ZN33clusterlin_components_Before_MainC2Ev
Unexecuted instantiation: _ZN37clusterlin_make_connected_Before_MainC2Ev
Unexecuted instantiation: _ZN31clusterlin_chunking_Before_MainC2Ev
Unexecuted instantiation: _ZN38clusterlin_ancestor_finder_Before_MainC2Ev
Unexecuted instantiation: _ZN36clusterlin_search_finder_Before_MainC2Ev
Unexecuted instantiation: _ZN45clusterlin_linearization_chunking_Before_MainC2Ev
Unexecuted instantiation: _ZN32clusterlin_linearize_Before_MainC2Ev
Unexecuted instantiation: _ZN36clusterlin_postlinearize_Before_MainC2Ev
Unexecuted instantiation: _ZN41clusterlin_postlinearize_tree_Before_MainC2Ev
Unexecuted instantiation: _ZN47clusterlin_postlinearize_moved_leaf_Before_MainC2Ev
Unexecuted instantiation: _ZN28clusterlin_merge_Before_MainC2Ev
Unexecuted instantiation: _ZN40clusterlin_fix_linearization_Before_MainC2Ev
Unexecuted instantiation: _ZN22coins_view_Before_MainC2Ev
Unexecuted instantiation: _ZN25coins_view_db_Before_MainC2Ev
Unexecuted instantiation: _ZN26coinscache_sim_Before_MainC2Ev
Unexecuted instantiation: _ZN19connman_Before_MainC2Ev
Unexecuted instantiation: _ZN18crypto_Before_MainC2Ev
Unexecuted instantiation: _ZN25crypto_aes256_Before_MainC2Ev
Unexecuted instantiation: _ZN28crypto_aes256cbc_Before_MainC2Ev
Unexecuted instantiation: _ZN27crypto_chacha20_Before_MainC2Ev
Unexecuted instantiation: _ZN32chacha20_split_crypt_Before_MainC2Ev
Unexecuted instantiation: _ZN36chacha20_split_keystream_Before_MainC2Ev
Unexecuted instantiation: _ZN29crypto_fschacha20_Before_MainC2Ev
Unexecuted instantiation: _ZN39crypto_aeadchacha20poly1305_Before_MainC2Ev
Unexecuted instantiation: _ZN37crypto_fschacha20poly1305_Before_MainC2Ev
Unexecuted instantiation: _ZN25crypto_common_Before_MainC2Ev
Unexecuted instantiation: _ZN37crypto_diff_fuzz_chacha20_Before_MainC2Ev
Unexecuted instantiation: _ZN39crypto_hkdf_hmac_sha256_l32_Before_MainC2Ev
Unexecuted instantiation: _ZN27crypto_poly1305_Before_MainC2Ev
Unexecuted instantiation: _ZN33crypto_poly1305_split_Before_MainC2Ev
Unexecuted instantiation: _ZN23cuckoocache_Before_MainC2Ev
Unexecuted instantiation: _ZN21decode_tx_Before_MainC2Ev
Unexecuted instantiation: _ZN35mocked_descriptor_parse_Before_MainC2Ev
Unexecuted instantiation: _ZN28descriptor_parse_Before_MainC2Ev
Unexecuted instantiation: _ZN36block_filter_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN33addr_info_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN39block_file_info_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN52block_header_and_short_txids_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN32fee_rate_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN36merkle_block_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN33out_point_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN43partial_merkle_tree_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31pub_key_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN30script_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN29tx_in_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN37flat_file_pos_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN39key_origin_info_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN52partially_signed_transaction_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN45prefilled_transaction_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN34psbt_input_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN35psbt_output_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN29block_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN36blocklocator_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN27blockmerkleroot_Before_MainC2Ev
Unexecuted instantiation: _ZN35blockheader_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN30txundo_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN33blockundo_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN29coins_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31netaddr_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31service_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN37messageheader_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31address_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN27inv_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN35bloomfilter_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN38diskblockindex_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN39txoutcompressor_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN41blocktransactions_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN48blocktransactionsrequest_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN40snapshotmetadata_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31uint160_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN31uint256_deserialize_Before_MainC2Ev
Unexecuted instantiation: _ZN23eval_script_Before_MainC2Ev
Unexecuted instantiation: _ZN19feefrac_Before_MainC2Ev
Unexecuted instantiation: _ZN32feefrac_div_fallback_Before_MainC2Ev
Unexecuted instantiation: _ZN27feefrac_mul_div_Before_MainC2Ev
Unexecuted instantiation: _ZN20fee_rate_Before_MainC2Ev
Unexecuted instantiation: _ZN45build_and_compare_feerate_diagram_Before_MainC2Ev
Unexecuted instantiation: _ZN16fees_Before_MainC2Ev
Unexecuted instantiation: _ZN20flatfile_Before_MainC2Ev
Unexecuted instantiation: _ZN17float_Before_MainC2Ev
Unexecuted instantiation: _ZN23golomb_rice_Before_MainC2Ev
Unexecuted instantiation: _ZN30headers_sync_state_Before_MainC2Ev
Unexecuted instantiation: _ZN15hex_Before_MainC2Ev
Unexecuted instantiation: _ZN24http_request_Before_MainC2Ev
Unexecuted instantiation: _ZN15i2p_Before_MainC2Ev
Unexecuted instantiation: _ZN19integer_Before_MainC2Ev
Unexecuted instantiation: _ZN15key_Before_MainC2Ev
Unexecuted instantiation: _ZN30ellswift_roundtrip_Before_MainC2Ev
Unexecuted instantiation: _ZN23bip324_ecdh_Before_MainC2Ev
Unexecuted instantiation: _ZN18key_io_Before_MainC2Ev
Unexecuted instantiation: _ZN24kitchen_sink_Before_MainC2Ev
Unexecuted instantiation: _ZN36load_external_block_file_Before_MainC2Ev
Unexecuted instantiation: _ZN18locale_Before_MainC2Ev
Unexecuted instantiation: _ZN23merkleblock_Before_MainC2Ev
Unexecuted instantiation: _ZN19message_Before_MainC2Ev
Unexecuted instantiation: _ZN29miniscript_stable_Before_MainC2Ev
Unexecuted instantiation: _ZN28miniscript_smart_Before_MainC2Ev
Unexecuted instantiation: _ZN29miniscript_string_Before_MainC2Ev
Unexecuted instantiation: _ZN29miniscript_script_Before_MainC2Ev
Unexecuted instantiation: _ZN22minisketch_Before_MainC2Ev
Unexecuted instantiation: mini_miner.cpp:_ZN12_GLOBAL__N_122mini_miner_Before_MainC2Ev
Unexecuted instantiation: mini_miner.cpp:_ZN12_GLOBAL__N_132mini_miner_selection_Before_MainC2Ev
Unexecuted instantiation: _ZN23num3072_mul_Before_MainC2Ev
Unexecuted instantiation: _ZN23num3072_inv_Before_MainC2Ev
Unexecuted instantiation: _ZN18muhash_Before_MainC2Ev
Unexecuted instantiation: _ZN35multiplication_overflow_Before_MainC2Ev
Unexecuted instantiation: _ZN15net_Before_MainC2Ev
Unexecuted instantiation: _ZN25local_address_Before_MainC2Ev
Unexecuted instantiation: _ZN27net_permissions_Before_MainC2Ev
Unexecuted instantiation: _ZN22netaddress_Before_MainC2Ev
Unexecuted instantiation: _ZN30netbase_dns_lookup_Before_MainC2Ev
Unexecuted instantiation: _ZN25node_eviction_Before_MainC2Ev
Unexecuted instantiation: _ZN20overflow_Before_MainC2Ev
Unexecuted instantiation: _ZN25p2p_handshake_Before_MainC2Ev
Unexecuted instantiation: _ZN31p2p_headers_presync_Before_MainC2Ev
Unexecuted instantiation: _ZN39p2p_transport_serialization_Before_MainC2Ev
Unexecuted instantiation: _ZN39p2p_transport_bidirectional_Before_MainC2Ev
Unexecuted instantiation: _ZN42p2p_transport_bidirectional_v2_Before_MainC2Ev
Unexecuted instantiation: _ZN44p2p_transport_bidirectional_v1v2_Before_MainC2Ev
Unexecuted instantiation: _ZN32pcp_request_port_map_Before_MainC2Ev
Unexecuted instantiation: _ZN35natpmp_request_port_map_Before_MainC2Ev
Unexecuted instantiation: package_eval.cpp:_ZN12_GLOBAL__N_134ephemeral_package_eval_Before_MainC2Ev
Unexecuted instantiation: package_eval.cpp:_ZN12_GLOBAL__N_127tx_package_eval_Before_MainC2Ev
Unexecuted instantiation: _ZN28parse_hd_keypath_Before_MainC2Ev
Unexecuted instantiation: _ZN25parse_iso8601_Before_MainC2Ev
Unexecuted instantiation: _ZN25parse_numbers_Before_MainC2Ev
Unexecuted instantiation: _ZN24parse_script_Before_MainC2Ev
Unexecuted instantiation: _ZN26parse_univalue_Before_MainC2Ev
Unexecuted instantiation: _ZN38partially_downloaded_block_Before_MainC2Ev
Unexecuted instantiation: _ZN28policy_estimator_Before_MainC2Ev
Unexecuted instantiation: _ZN31policy_estimator_io_Before_MainC2Ev
Unexecuted instantiation: _ZN25pool_resource_Before_MainC2Ev
Unexecuted instantiation: _ZN15pow_Before_MainC2Ev
Unexecuted instantiation: _ZN26pow_transition_Before_MainC2Ev
Unexecuted instantiation: _ZN21prevector_Before_MainC2Ev
Unexecuted instantiation: _ZN34primitives_transaction_Before_MainC2Ev
Unexecuted instantiation: _ZN27process_message_Before_MainC2Ev
Unexecuted instantiation: _ZN28process_messages_Before_MainC2Ev
Unexecuted instantiation: _ZN20protocol_Before_MainC2Ev
Unexecuted instantiation: _ZN16psbt_Before_MainC2Ev
Unexecuted instantiation: _ZN18random_Before_MainC2Ev
Unexecuted instantiation: _ZN15rbf_Before_MainC2Ev
Unexecuted instantiation: _ZN23package_rbf_Before_MainC2Ev
Unexecuted instantiation: _ZN32rolling_bloom_filter_Before_MainC2Ev
Unexecuted instantiation: _ZN15rpc_Before_MainC2Ev
Unexecuted instantiation: _ZN18script_Before_MainC2Ev
Unexecuted instantiation: script_assets_test_minimizer.cpp:_ZN12_GLOBAL__N_140script_assets_test_minimizer_Before_MainC2Ev
Unexecuted instantiation: _ZN35script_descriptor_cache_Before_MainC2Ev
Unexecuted instantiation: _ZN24script_flags_Before_MainC2Ev
Unexecuted instantiation: _ZN25script_format_Before_MainC2Ev
Unexecuted instantiation: _ZN30script_interpreter_Before_MainC2Ev
Unexecuted instantiation: _ZN22script_ops_Before_MainC2Ev
Unexecuted instantiation: _ZN26script_parsing_Before_MainC2Ev
Unexecuted instantiation: _ZN27script_sigcache_Before_MainC2Ev
Unexecuted instantiation: _ZN23script_sign_Before_MainC2Ev
Unexecuted instantiation: _ZN25scriptnum_ops_Before_MainC2Ev
Unexecuted instantiation: _ZN49secp256k1_ec_seckey_import_export_der_Before_MainC2Ev
Unexecuted instantiation: _ZN51secp256k1_ecdsa_signature_parse_der_lax_Before_MainC2Ev
Unexecuted instantiation: _ZN29signature_checker_Before_MainC2Ev
Unexecuted instantiation: _ZN18signet_Before_MainC2Ev
Unexecuted instantiation: _ZN18socks5_Before_MainC2Ev
Unexecuted instantiation: _ZN16span_Before_MainC2Ev
Unexecuted instantiation: _ZN18string_Before_MainC2Ev
Unexecuted instantiation: _ZN22str_printf_Before_MainC2Ev
Unexecuted instantiation: system.cpp:_ZN12_GLOBAL__N_118system_Before_MainC2Ev
Unexecuted instantiation: _ZN23timeoffsets_Before_MainC2Ev
Unexecuted instantiation: _ZN22torcontrol_Before_MainC2Ev
Unexecuted instantiation: _ZN23transaction_Before_MainC2Ev
Unexecuted instantiation: txdownloadman.cpp:_ZN12_GLOBAL__N_125txdownloadman_Before_MainC2Ev
Unexecuted instantiation: txdownloadman.cpp:_ZN12_GLOBAL__N_130txdownloadman_impl_Before_MainC2Ev
Unexecuted instantiation: _ZN17tx_in_Before_MainC2Ev
Unexecuted instantiation: _ZN18tx_out_Before_MainC2Ev
Unexecuted instantiation: tx_pool.cpp:_ZN12_GLOBAL__N_128tx_pool_standard_Before_MainC2Ev
Unexecuted instantiation: tx_pool.cpp:_ZN12_GLOBAL__N_119tx_pool_Before_MainC2Ev
Unexecuted instantiation: _ZN19txgraph_Before_MainC2Ev
Unexecuted instantiation: _ZN20txorphan_Before_MainC2Ev
Unexecuted instantiation: _ZN21txrequest_Before_MainC2Ev
Unexecuted instantiation: utxo_snapshot.cpp:_ZN12_GLOBAL__N_125utxo_snapshot_Before_MainC2Ev
Unexecuted instantiation: utxo_snapshot.cpp:_ZN12_GLOBAL__N_133utxo_snapshot_invalid_Before_MainC2Ev
Unexecuted instantiation: _ZN29utxo_total_supply_Before_MainC2Ev
Unexecuted instantiation: _ZN35validation_load_mempool_Before_MainC2Ev
Unexecuted instantiation: _ZN20vecdeque_Before_MainC2Ev
Unexecuted instantiation: versionbits.cpp:_ZN12_GLOBAL__N_123versionbits_Before_MainC2Ev
Unexecuted instantiation: coincontrol.cpp:_ZN6wallet12_GLOBAL__N_123coincontrol_Before_MainC2Ev
Unexecuted instantiation: _ZN6wallet24coin_grinder_Before_MainC2Ev
Unexecuted instantiation: _ZN6wallet35coin_grinder_is_optimal_Before_MainC2Ev
Unexecuted instantiation: _ZN6wallet29coinselection_bnb_Before_MainC2Ev
Unexecuted instantiation: _ZN6wallet29coinselection_srd_Before_MainC2Ev
Unexecuted instantiation: _ZN6wallet34coinselection_knapsack_Before_MainC2Ev
Unexecuted instantiation: crypter.cpp:_ZN6wallet12_GLOBAL__N_119crypter_Before_MainC2Ev
Unexecuted instantiation: fees.cpp:_ZN6wallet12_GLOBAL__N_123wallet_fees_Before_MainC2Ev
Unexecuted instantiation: notifications.cpp:_ZN6wallet12_GLOBAL__N_132wallet_notifications_Before_MainC2Ev
Unexecuted instantiation: scriptpubkeyman.cpp:_ZN6wallet12_GLOBAL__N_127scriptpubkeyman_Before_MainC2Ev
Unexecuted instantiation: spend.cpp:_ZN6wallet12_GLOBAL__N_137wallet_create_transaction_Before_MainC2Ev
Unexecuted instantiation: _ZN29wallet_bdb_parser_Before_MainC2Ev
44
    } const static g_##name##_before_main;                                            \
45
    void name##_fuzz_target(FuzzBufferType buffer)
46
47
#endif // BITCOIN_TEST_FUZZ_FUZZ_H