Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/util.h
// Copyright (c) 2009-2019 The Bitcoin Core developers | // Copyright (c) 2009-2019 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#ifndef BITCOIN_TEST_FUZZ_UTIL_H | #ifndef BITCOIN_TEST_FUZZ_UTIL_H | ||||
#define BITCOIN_TEST_FUZZ_UTIL_H | #define BITCOIN_TEST_FUZZ_UTIL_H | ||||
#include <amount.h> | #include <amount.h> | ||||
#include <arith_uint256.h> | #include <arith_uint256.h> | ||||
#include <attributes.h> | #include <attributes.h> | ||||
#include <chainparamsbase.h> | |||||
#include <coins.h> | #include <coins.h> | ||||
#include <netbase.h> | |||||
#include <script/script.h> | #include <script/script.h> | ||||
#include <script/standard.h> | #include <script/standard.h> | ||||
#include <serialize.h> | #include <serialize.h> | ||||
#include <streams.h> | #include <streams.h> | ||||
#include <uint256.h> | #include <uint256.h> | ||||
#include <version.h> | #include <version.h> | ||||
#include <test/fuzz/FuzzedDataProvider.h> | #include <test/fuzz/FuzzedDataProvider.h> | ||||
#include <test/fuzz/fuzz.h> | #include <test/fuzz/fuzz.h> | ||||
#include <test/util/setup_common.h> | |||||
#include <algorithm> | #include <algorithm> | ||||
#include <cstdint> | #include <cstdint> | ||||
#include <string> | #include <string> | ||||
#include <vector> | #include <vector> | ||||
namespace fuzzer { | namespace fuzzer { | ||||
// FIXME find a better way to avoid duplicating the MAX_MONEY definition | // FIXME find a better way to avoid duplicating the MAX_MONEY definition | ||||
▲ Show 20 Lines • Show All 186 Lines • ▼ Show 20 Lines | ConsumeFixedLengthByteVector(FuzzedDataProvider &fuzzed_data_provider, | ||||
const std::vector<uint8_t> random_bytes = | const std::vector<uint8_t> random_bytes = | ||||
fuzzed_data_provider.ConsumeBytes<uint8_t>(length); | fuzzed_data_provider.ConsumeBytes<uint8_t>(length); | ||||
if (!random_bytes.empty()) { | if (!random_bytes.empty()) { | ||||
std::memcpy(result.data(), random_bytes.data(), random_bytes.size()); | std::memcpy(result.data(), random_bytes.data(), random_bytes.size()); | ||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
CNetAddr ConsumeNetAddr(FuzzedDataProvider &fuzzed_data_provider) noexcept { | |||||
const Network network = fuzzed_data_provider.PickValueInArray( | |||||
{Network::NET_IPV4, Network::NET_IPV6, Network::NET_INTERNAL, | |||||
Network::NET_ONION}); | |||||
CNetAddr net_addr; | |||||
if (network == Network::NET_IPV4) { | |||||
const in_addr v4_addr = { | |||||
.s_addr = fuzzed_data_provider.ConsumeIntegral<uint32_t>()}; | |||||
net_addr = CNetAddr{v4_addr}; | |||||
} else if (network == Network::NET_IPV6) { | |||||
if (fuzzed_data_provider.remaining_bytes() >= 16) { | |||||
in6_addr v6_addr = {}; | |||||
memcpy(v6_addr.s6_addr, | |||||
fuzzed_data_provider.ConsumeBytes<uint8_t>(16).data(), 16); | |||||
net_addr = CNetAddr{ | |||||
v6_addr, fuzzed_data_provider.ConsumeIntegral<uint32_t>()}; | |||||
} | |||||
} else if (network == Network::NET_INTERNAL) { | |||||
net_addr.SetInternal(fuzzed_data_provider.ConsumeBytesAsString(32)); | |||||
} else if (network == Network::NET_ONION) { | |||||
net_addr.SetSpecial(fuzzed_data_provider.ConsumeBytesAsString(32)); | |||||
} | |||||
return net_addr; | |||||
} | |||||
CSubNet ConsumeSubNet(FuzzedDataProvider &fuzzed_data_provider) noexcept { | |||||
return {ConsumeNetAddr(fuzzed_data_provider), | |||||
fuzzed_data_provider.ConsumeIntegral<int32_t>()}; | |||||
} | |||||
void InitializeFuzzingContext( | |||||
const std::string &chain_name = CBaseChainParams::REGTEST) { | |||||
static const BasicTestingSetup basic_testing_setup{chain_name, | |||||
{"-nodebuglogfile"}}; | |||||
} | |||||
#endif // BITCOIN_TEST_FUZZ_UTIL_H | #endif // BITCOIN_TEST_FUZZ_UTIL_H |