Skip to content

Commit 447174d

Browse files
committed
Remove unused BlockFilter::Unserialize()
1 parent 0b976a6 commit 447174d

File tree

7 files changed

+43
-52
lines changed

7 files changed

+43
-52
lines changed

src/bench/gcs_filter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ static void GCSBlockFilterGetHash(benchmark::Bench& bench)
2323
auto elements = GenerateGCSTestElements();
2424

2525
GCSFilter filter({0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, elements);
26-
BlockFilter block_filter(BlockFilterType::BASIC, {}, filter.GetEncoded(), /*filter_checked=*/false);
26+
BlockFilter block_filter(BlockFilterType::BASIC, {}, filter.GetEncoded());
2727

2828
bench.unit("elem").run([&] {
2929
block_filter.GetHash();
@@ -50,7 +50,7 @@ static void GCSFilterDecode(benchmark::Bench& bench)
5050
auto encoded = filter.GetEncoded();
5151

5252
bench.unit("elem").run([&] {
53-
GCSFilter filter({0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, encoded, /*filter_checked=*/false);
53+
GCSFilter filter({0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, encoded);
5454
});
5555
}
5656

@@ -62,7 +62,7 @@ static void GCSFilterDecodeChecked(benchmark::Bench& bench)
6262
auto encoded = filter.GetEncoded();
6363

6464
bench.unit("elem").run([&] {
65-
GCSFilter filter({0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, encoded, /*filter_checked=*/true);
65+
GCSFilter filter({0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, encoded);
6666
});
6767
}
6868

src/blockfilter.cpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ GCSFilter::GCSFilter(const Params& params)
4747
: m_params(params), m_N(0), m_F(0), m_encoded{0}
4848
{}
4949

50-
GCSFilter::GCSFilter(const Params& params, std::vector<unsigned char> encoded_filter, bool filter_checked)
50+
GCSFilter::GCSFilter(const Params& params, std::vector<unsigned char> encoded_filter)
5151
: m_params(params), m_encoded(std::move(encoded_filter))
5252
{
5353
SpanReader stream{GCS_SER_TYPE, GCS_SER_VERSION, m_encoded};
@@ -58,18 +58,6 @@ GCSFilter::GCSFilter(const Params& params, std::vector<unsigned char> encoded_fi
5858
throw std::ios_base::failure("N must be <2^32");
5959
}
6060
m_F = static_cast<uint64_t>(m_N) * static_cast<uint64_t>(m_params.m_M);
61-
62-
if (filter_checked) return;
63-
64-
// Verify that the encoded filter contains exactly N elements. If it has too much or too little
65-
// data, a std::ios_base::failure exception will be raised.
66-
BitStreamReader<SpanReader> bitreader{stream};
67-
for (uint64_t i = 0; i < m_N; ++i) {
68-
GolombRiceDecode(bitreader, m_params.m_P);
69-
}
70-
if (!stream.empty()) {
71-
throw std::ios_base::failure("encoded_filter contains excess data");
72-
}
7361
}
7462

7563
GCSFilter::GCSFilter(const Params& params, const ElementSet& elements)
@@ -221,14 +209,14 @@ static GCSFilter::ElementSet BasicFilterElements(const CBlock& block,
221209
}
222210

223211
BlockFilter::BlockFilter(BlockFilterType filter_type, const uint256& block_hash,
224-
std::vector<unsigned char> filter, bool filter_checked)
212+
std::vector<unsigned char> filter)
225213
: m_filter_type(filter_type), m_block_hash(block_hash)
226214
{
227215
GCSFilter::Params params;
228216
if (!BuildParams(params)) {
229217
throw std::invalid_argument("unknown filter_type");
230218
}
231-
m_filter = GCSFilter(params, std::move(filter), filter_checked);
219+
m_filter = GCSFilter(params, std::move(filter));
232220
}
233221

234222
BlockFilter::BlockFilter(BlockFilterType filter_type, const CBlock& block, const CBlockUndo& block_undo)

src/blockfilter.h

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class GCSFilter
5959
explicit GCSFilter(const Params& params = Params());
6060

6161
/** Reconstructs an already-created filter from an encoding. */
62-
GCSFilter(const Params& params, std::vector<unsigned char> encoded_filter, bool filter_checked);
62+
GCSFilter(const Params& params, std::vector<unsigned char> encoded_filter);
6363

6464
/** Builds a new filter from the params and set of elements. */
6565
GCSFilter(const Params& params, const ElementSet& elements);
@@ -122,7 +122,7 @@ class BlockFilter
122122

123123
//! Reconstruct a BlockFilter from parts.
124124
BlockFilter(BlockFilterType filter_type, const uint256& block_hash,
125-
std::vector<unsigned char> filter, bool filter_checked);
125+
std::vector<unsigned char> filter);
126126

127127
//! Construct a new BlockFilter of the specified type from a block.
128128
BlockFilter(BlockFilterType filter_type, const CBlock& block, const CBlockUndo& block_undo);
@@ -148,24 +148,6 @@ class BlockFilter
148148
<< m_block_hash
149149
<< m_filter.GetEncoded();
150150
}
151-
152-
template <typename Stream>
153-
void Unserialize(Stream& s) {
154-
std::vector<unsigned char> encoded_filter;
155-
uint8_t filter_type;
156-
157-
s >> filter_type
158-
>> m_block_hash
159-
>> encoded_filter;
160-
161-
m_filter_type = static_cast<BlockFilterType>(filter_type);
162-
163-
GCSFilter::Params params;
164-
if (!BuildParams(params)) {
165-
throw std::ios_base::failure("unknown filter_type");
166-
}
167-
m_filter = GCSFilter(params, std::move(encoded_filter), /*filter_checked=*/false);
168-
}
169151
};
170152

171153
#endif // BITCOIN_BLOCKFILTER_H

src/index/blockfilterindex.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ bool BlockFilterIndex::ReadFilterFromDisk(const FlatFilePos& pos, const uint256&
159159
uint256 result;
160160
CHash256().Write(encoded_filter).Finalize(result);
161161
if (result != hash) return error("Checksum mismatch in filter decode.");
162-
filter = BlockFilter(GetFilterType(), block_hash, std::move(encoded_filter), /*filter_checked=*/true);
162+
filter = BlockFilter(GetFilterType(), block_hash, std::move(encoded_filter));
163163
}
164164
catch (const std::exception& e) {
165165
return error("%s: Failed to deserialize block filter from disk: %s", __func__, e.what());

src/test/blockfilter_tests.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ BOOST_AUTO_TEST_CASE(gcsfilter_default_constructor)
5252
BOOST_CHECK_EQUAL(params.m_M, 1U);
5353
}
5454

55+
template <typename Stream>
56+
static BlockFilter UnserializeBlockFilter(Stream& s) {
57+
std::vector<unsigned char> encoded_filter;
58+
uint8_t filter_type_uint8;
59+
uint256 block_hash;
60+
61+
s >> filter_type_uint8
62+
>> block_hash
63+
>> encoded_filter;
64+
65+
BlockFilterType filter_type = static_cast<BlockFilterType>(filter_type_uint8);
66+
BlockFilter block_filter(filter_type, block_hash, std::move(encoded_filter));
67+
return block_filter;
68+
}
69+
5570
BOOST_AUTO_TEST_CASE(blockfilter_basic_test)
5671
{
5772
CScript included_scripts[5], excluded_scripts[4];
@@ -112,7 +127,7 @@ BOOST_AUTO_TEST_CASE(blockfilter_basic_test)
112127

113128
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
114129
stream << block_filter;
115-
stream >> block_filter2;
130+
block_filter2 = UnserializeBlockFilter(stream);
116131

117132
BOOST_CHECK_EQUAL(block_filter.GetFilterType(), block_filter2.GetFilterType());
118133
BOOST_CHECK_EQUAL(block_filter.GetBlockHash(), block_filter2.GetBlockHash());

src/test/fuzz/blockfilter.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,32 @@
1515
FUZZ_TARGET(blockfilter)
1616
{
1717
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
18-
const std::optional<BlockFilter> block_filter = ConsumeDeserializable<BlockFilter>(fuzzed_data_provider);
19-
if (!block_filter) {
18+
const std::optional<uint256> u256 = ConsumeDeserializable<uint256>(fuzzed_data_provider);
19+
if (!u256) {
2020
return;
2121
}
22+
23+
GCSFilter::ElementSet elements;
24+
size_t num_elements = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(1, 10000000);
25+
for (size_t i=0; i < num_elements; i++) {
26+
std::vector<unsigned char> element = ConsumeRandomLengthIntegralVector<unsigned char>(fuzzed_data_provider, 32);
27+
elements.insert(element);
28+
}
29+
30+
GCSFilter filter({u256->GetUint64(0), u256->GetUint64(1), BASIC_FILTER_P, BASIC_FILTER_M}, elements);
31+
BlockFilter block_filter(BlockFilterType::BASIC, u256.value(), filter.GetEncoded());
2232
{
23-
(void)block_filter->ComputeHeader(ConsumeUInt256(fuzzed_data_provider));
24-
(void)block_filter->GetBlockHash();
25-
(void)block_filter->GetEncodedFilter();
26-
(void)block_filter->GetHash();
33+
(void)block_filter.ComputeHeader(ConsumeUInt256(fuzzed_data_provider));
34+
(void)block_filter.GetBlockHash();
35+
(void)block_filter.GetEncodedFilter();
36+
(void)block_filter.GetHash();
2737
}
2838
{
29-
const BlockFilterType block_filter_type = block_filter->GetFilterType();
39+
const BlockFilterType block_filter_type = block_filter.GetFilterType();
3040
(void)BlockFilterTypeName(block_filter_type);
3141
}
3242
{
33-
const GCSFilter gcs_filter = block_filter->GetFilter();
43+
const GCSFilter gcs_filter = block_filter.GetFilter();
3444
(void)gcs_filter.GetN();
3545
(void)gcs_filter.GetParams();
3646
(void)gcs_filter.GetEncoded();

src/test/fuzz/deserialize.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,6 @@ void AssertEqualAfterSerializeDeserialize(const T& obj, const int version = INIT
111111

112112
} // namespace
113113

114-
FUZZ_TARGET_DESERIALIZE(block_filter_deserialize, {
115-
BlockFilter block_filter;
116-
DeserializeFromFuzzingInput(buffer, block_filter);
117-
})
118114
FUZZ_TARGET_DESERIALIZE(addr_info_deserialize, {
119115
AddrInfo addr_info;
120116
DeserializeFromFuzzingInput(buffer, addr_info);

0 commit comments

Comments
 (0)