mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-18 22:35:39 +01:00
Use serialization parameters for CAddress serialization
This also cleans up the addrman (de)serialization code paths to only allow `Disk` serialization. Some unit tests previously forced a `Network` serialization, which does not make sense, because Bitcoin Core in production will always `Disk` serialize. This cleanup idea was suggested by Pieter Wuille and implemented by Anthony Towns. Co-authored-by: Pieter Wuille <pieter@wuille.net> Co-authored-by: Anthony Towns <aj@erisian.com.au>
This commit is contained in:
@@ -55,6 +55,27 @@ CAddress ConsumeAddress(FuzzedDataProvider& fuzzed_data_provider) noexcept
|
||||
return {ConsumeService(fuzzed_data_provider), ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS), NodeSeconds{std::chrono::seconds{fuzzed_data_provider.ConsumeIntegral<uint32_t>()}}};
|
||||
}
|
||||
|
||||
template <typename P>
|
||||
P ConsumeDeserializationParams(FuzzedDataProvider& fuzzed_data_provider) noexcept
|
||||
{
|
||||
constexpr std::array ADDR_ENCODINGS{
|
||||
CNetAddr::Encoding::V1,
|
||||
CNetAddr::Encoding::V2,
|
||||
};
|
||||
constexpr std::array ADDR_FORMATS{
|
||||
CAddress::Format::Disk,
|
||||
CAddress::Format::Network,
|
||||
};
|
||||
if constexpr (std::is_same_v<P, CNetAddr::SerParams>) {
|
||||
return P{PickValue(fuzzed_data_provider, ADDR_ENCODINGS)};
|
||||
}
|
||||
if constexpr (std::is_same_v<P, CAddress::SerParams>) {
|
||||
return P{{PickValue(fuzzed_data_provider, ADDR_ENCODINGS)}, PickValue(fuzzed_data_provider, ADDR_FORMATS)};
|
||||
}
|
||||
}
|
||||
template CNetAddr::SerParams ConsumeDeserializationParams(FuzzedDataProvider&) noexcept;
|
||||
template CAddress::SerParams ConsumeDeserializationParams(FuzzedDataProvider&) noexcept;
|
||||
|
||||
FuzzedSock::FuzzedSock(FuzzedDataProvider& fuzzed_data_provider)
|
||||
: m_fuzzed_data_provider{fuzzed_data_provider}, m_selectable{fuzzed_data_provider.ConsumeBool()}
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user