mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-15 03:12:44 +02:00
tests: Add ConsumeSubNet(...). Move and increase coverage in ConsumeNetAddr(...).
This commit is contained in:
parent
abdfd2d0e3
commit
deba199f1c
@ -5,41 +5,13 @@
|
|||||||
#include <netaddress.h>
|
#include <netaddress.h>
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
|
#include <test/fuzz/util.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace {
|
|
||||||
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});
|
|
||||||
if (network == Network::NET_IPV4) {
|
|
||||||
const in_addr v4_addr = {
|
|
||||||
.s_addr = fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
|
|
||||||
return CNetAddr{v4_addr};
|
|
||||||
} else if (network == Network::NET_IPV6) {
|
|
||||||
if (fuzzed_data_provider.remaining_bytes() < 16) {
|
|
||||||
return CNetAddr{};
|
|
||||||
}
|
|
||||||
in6_addr v6_addr = {};
|
|
||||||
memcpy(v6_addr.s6_addr, fuzzed_data_provider.ConsumeBytes<uint8_t>(16).data(), 16);
|
|
||||||
return CNetAddr{v6_addr, fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
|
|
||||||
} else if (network == Network::NET_INTERNAL) {
|
|
||||||
CNetAddr net_addr;
|
|
||||||
net_addr.SetInternal(fuzzed_data_provider.ConsumeBytesAsString(32));
|
|
||||||
return net_addr;
|
|
||||||
} else if (network == Network::NET_ONION) {
|
|
||||||
CNetAddr net_addr;
|
|
||||||
net_addr.SetSpecial(fuzzed_data_provider.ConsumeBytesAsString(32));
|
|
||||||
return net_addr;
|
|
||||||
} else {
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}; // namespace
|
|
||||||
|
|
||||||
void test_one_input(const std::vector<uint8_t>& buffer)
|
void test_one_input(const std::vector<uint8_t>& buffer)
|
||||||
{
|
{
|
||||||
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
|
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <attributes.h>
|
#include <attributes.h>
|
||||||
#include <coins.h>
|
#include <coins.h>
|
||||||
#include <consensus/consensus.h>
|
#include <consensus/consensus.h>
|
||||||
|
#include <netaddress.h>
|
||||||
#include <primitives/transaction.h>
|
#include <primitives/transaction.h>
|
||||||
#include <script/script.h>
|
#include <script/script.h>
|
||||||
#include <script/standard.h>
|
#include <script/standard.h>
|
||||||
@ -228,4 +229,31 @@ NODISCARD inline std::vector<uint8_t> ConsumeFixedLengthByteVector(FuzzedDataPro
|
|||||||
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>()};
|
||||||
|
}
|
||||||
|
|
||||||
#endif // BITCOIN_TEST_FUZZ_UTIL_H
|
#endif // BITCOIN_TEST_FUZZ_UTIL_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user