From c0bbf8193d92ba85d62092c4fd886ff4461f65bf Mon Sep 17 00:00:00 2001 From: practicalswift Date: Sat, 9 May 2020 21:26:00 +0000 Subject: tests: Fill fuzzing coverage gaps for functions in primitives/block.h --- src/test/fuzz/block_header.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/test/fuzz/block_header.cpp b/src/test/fuzz/block_header.cpp index 92dcccc0e1..f0ddae14f6 100644 --- a/src/test/fuzz/block_header.cpp +++ b/src/test/fuzz/block_header.cpp @@ -38,4 +38,12 @@ void test_one_input(const std::vector& buffer) block.SetNull(); assert(block.GetBlockHeader().GetHash() == mut_block_header.GetHash()); } + { + std::optional block_locator = ConsumeDeserializable(fuzzed_data_provider); + if (block_locator) { + (void)block_locator->IsNull(); + block_locator->SetNull(); + assert(block_locator->IsNull()); + } + } } -- cgit v1.2.3 From b74f3d6c452d9ad7013c70a91216220917978f66 Mon Sep 17 00:00:00 2001 From: practicalswift Date: Sat, 9 May 2020 21:27:15 +0000 Subject: tests: Fill fuzzing coverage gaps for functions in consensus/validation.h --- src/test/fuzz/block.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/test/fuzz/block.cpp b/src/test/fuzz/block.cpp index f30fa03e0b..91bd34a251 100644 --- a/src/test/fuzz/block.cpp +++ b/src/test/fuzz/block.cpp @@ -38,12 +38,17 @@ void test_one_input(const std::vector& buffer) const Consensus::Params& consensus_params = Params().GetConsensus(); BlockValidationState validation_state_pow_and_merkle; const bool valid_incl_pow_and_merkle = CheckBlock(block, validation_state_pow_and_merkle, consensus_params, /* fCheckPOW= */ true, /* fCheckMerkleRoot= */ true); + assert(validation_state_pow_and_merkle.IsValid() || validation_state_pow_and_merkle.IsInvalid() || validation_state_pow_and_merkle.IsError()); + (void)validation_state_pow_and_merkle.Error(""); BlockValidationState validation_state_pow; const bool valid_incl_pow = CheckBlock(block, validation_state_pow, consensus_params, /* fCheckPOW= */ true, /* fCheckMerkleRoot= */ false); + assert(validation_state_pow.IsValid() || validation_state_pow.IsInvalid() || validation_state_pow.IsError()); BlockValidationState validation_state_merkle; const bool valid_incl_merkle = CheckBlock(block, validation_state_merkle, consensus_params, /* fCheckPOW= */ false, /* fCheckMerkleRoot= */ true); + assert(validation_state_merkle.IsValid() || validation_state_merkle.IsInvalid() || validation_state_merkle.IsError()); BlockValidationState validation_state_none; const bool valid_incl_none = CheckBlock(block, validation_state_none, consensus_params, /* fCheckPOW= */ false, /* fCheckMerkleRoot= */ false); + assert(validation_state_none.IsValid() || validation_state_none.IsInvalid() || validation_state_none.IsError()); if (valid_incl_pow_and_merkle) { assert(valid_incl_pow && valid_incl_merkle && valid_incl_none); } else if (valid_incl_merkle || valid_incl_pow) { -- cgit v1.2.3 From fb559c1170773360afb9d05daaccd57d18636ee9 Mon Sep 17 00:00:00 2001 From: practicalswift Date: Sun, 10 May 2020 12:32:54 +0000 Subject: tests: Fill fuzzing coverage gaps for functions in util/translation.h --- src/test/fuzz/string.cpp | 6 ++++++ src/test/fuzz/strprintf.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'src') diff --git a/src/test/fuzz/string.cpp b/src/test/fuzz/string.cpp index 49bee0e81f..3c1f911f7e 100644 --- a/src/test/fuzz/string.cpp +++ b/src/test/fuzz/string.cpp @@ -119,4 +119,10 @@ void test_one_input(const std::vector& buffer) int64_t amount_out; (void)ParseFixedPoint(random_string_1, fuzzed_data_provider.ConsumeIntegralInRange(0, 1024), &amount_out); } + { + (void)Untranslated(random_string_1); + const bilingual_str bs1{random_string_1, random_string_2}; + const bilingual_str bs2{random_string_2, random_string_1}; + (void)(bs1 + bs2); + } } diff --git a/src/test/fuzz/strprintf.cpp b/src/test/fuzz/strprintf.cpp index d5be1070bd..29064bc45c 100644 --- a/src/test/fuzz/strprintf.cpp +++ b/src/test/fuzz/strprintf.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -16,6 +17,7 @@ void test_one_input(const std::vector& buffer) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); const std::string format_string = fuzzed_data_provider.ConsumeRandomLengthString(64); + const bilingual_str bilingual_string{format_string, format_string}; const int digits_in_format_specifier = std::count_if(format_string.begin(), format_string.end(), IsDigit); @@ -47,50 +49,62 @@ void test_one_input(const std::vector& buffer) try { (void)strprintf(format_string, (signed char*)nullptr); + (void)tinyformat::format(bilingual_string, (signed char*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (unsigned char*)nullptr); + (void)tinyformat::format(bilingual_string, (unsigned char*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (void*)nullptr); + (void)tinyformat::format(bilingual_string, (void*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (bool*)nullptr); + (void)tinyformat::format(bilingual_string, (bool*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (float*)nullptr); + (void)tinyformat::format(bilingual_string, (float*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (double*)nullptr); + (void)tinyformat::format(bilingual_string, (double*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (int16_t*)nullptr); + (void)tinyformat::format(bilingual_string, (int16_t*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (uint16_t*)nullptr); + (void)tinyformat::format(bilingual_string, (uint16_t*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (int32_t*)nullptr); + (void)tinyformat::format(bilingual_string, (int32_t*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (uint32_t*)nullptr); + (void)tinyformat::format(bilingual_string, (uint32_t*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (int64_t*)nullptr); + (void)tinyformat::format(bilingual_string, (int64_t*)nullptr); } catch (const tinyformat::format_error&) { } try { (void)strprintf(format_string, (uint64_t*)nullptr); + (void)tinyformat::format(bilingual_string, (uint64_t*)nullptr); } catch (const tinyformat::format_error&) { } @@ -98,21 +112,27 @@ void test_one_input(const std::vector& buffer) switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 5)) { case 0: (void)strprintf(format_string, fuzzed_data_provider.ConsumeRandomLengthString(32)); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeRandomLengthString(32)); break; case 1: (void)strprintf(format_string, fuzzed_data_provider.ConsumeRandomLengthString(32).c_str()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeRandomLengthString(32).c_str()); break; case 2: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 3: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 4: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 5: (void)strprintf(format_string, fuzzed_data_provider.ConsumeBool()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeBool()); break; } } catch (const tinyformat::format_error&) { @@ -138,27 +158,35 @@ void test_one_input(const std::vector& buffer) switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 7)) { case 0: (void)strprintf(format_string, fuzzed_data_provider.ConsumeFloatingPoint()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeFloatingPoint()); break; case 1: (void)strprintf(format_string, fuzzed_data_provider.ConsumeFloatingPoint()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeFloatingPoint()); break; case 2: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 3: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 4: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 5: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 6: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; case 7: (void)strprintf(format_string, fuzzed_data_provider.ConsumeIntegral()); + (void)tinyformat::format(bilingual_string, fuzzed_data_provider.ConsumeIntegral()); break; } } catch (const tinyformat::format_error&) { -- cgit v1.2.3 From cd34038cbda4864e4770734c44b18d3e01aa2a28 Mon Sep 17 00:00:00 2001 From: practicalswift Date: Sun, 10 May 2020 18:35:55 +0000 Subject: Switch from Optional to std::optional (C++17). Run clang-format. --- src/test/fuzz/addrdb.cpp | 4 +- src/test/fuzz/asmap.cpp | 4 +- src/test/fuzz/asmap_direct.cpp | 6 ++- src/test/fuzz/block_header.cpp | 4 +- src/test/fuzz/blockfilter.cpp | 4 +- src/test/fuzz/bloom_filter.cpp | 8 +-- src/test/fuzz/chain.cpp | 4 +- src/test/fuzz/checkqueue.cpp | 1 - src/test/fuzz/cuckoocache.cpp | 1 - src/test/fuzz/fees.cpp | 1 - src/test/fuzz/flatfile.cpp | 6 +-- src/test/fuzz/golomb_rice.cpp | 2 +- src/test/fuzz/hex.cpp | 3 +- src/test/fuzz/merkleblock.cpp | 4 +- src/test/fuzz/message.cpp | 1 - src/test/fuzz/net_permissions.cpp | 1 - src/test/fuzz/policy_estimator.cpp | 6 +-- src/test/fuzz/pow.cpp | 6 +-- src/test/fuzz/prevector.cpp | 93 +++++++++++++++++++------------- src/test/fuzz/primitives_transaction.cpp | 8 +-- src/test/fuzz/protocol.cpp | 6 +-- src/test/fuzz/rbf.cpp | 6 +-- src/test/fuzz/rolling_bloom_filter.cpp | 4 +- src/test/fuzz/script.cpp | 9 +++- src/test/fuzz/util.h | 6 +-- 25 files changed, 111 insertions(+), 87 deletions(-) (limited to 'src') diff --git a/src/test/fuzz/addrdb.cpp b/src/test/fuzz/addrdb.cpp index f21ff3fac3..524cea83fe 100644 --- a/src/test/fuzz/addrdb.cpp +++ b/src/test/fuzz/addrdb.cpp @@ -3,13 +3,13 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include #include #include #include +#include #include #include @@ -30,7 +30,7 @@ void test_one_input(const std::vector& buffer) })}; break; case 2: { - const Optional ban_entry = ConsumeDeserializable(fuzzed_data_provider); + const std::optional ban_entry = ConsumeDeserializable(fuzzed_data_provider); if (ban_entry) { return *ban_entry; } diff --git a/src/test/fuzz/asmap.cpp b/src/test/fuzz/asmap.cpp index ea56277eac..40ca01bd9f 100644 --- a/src/test/fuzz/asmap.cpp +++ b/src/test/fuzz/asmap.cpp @@ -23,8 +23,8 @@ static const std::vector IPV4_PREFIX_ASMAP = { true, true, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, // Match 0x00 true, true, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, // Match 0x00 true, true, false, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, // Match 0x00 - true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, // Match 0xFF - true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true // Match 0xFF + true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, // Match 0xFF + true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true // Match 0xFF }; void test_one_input(const std::vector& buffer) diff --git a/src/test/fuzz/asmap_direct.cpp b/src/test/fuzz/asmap_direct.cpp index 6d8a65f5ab..2d21eff9d6 100644 --- a/src/test/fuzz/asmap_direct.cpp +++ b/src/test/fuzz/asmap_direct.cpp @@ -2,8 +2,8 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include #include +#include #include #include @@ -34,7 +34,9 @@ void test_one_input(const std::vector& buffer) if (SanityCheckASMap(asmap, buffer.size() - 1 - sep_pos)) { // Verify that for valid asmaps, no prefix (except up to 7 zero padding bits) is valid. std::vector asmap_prefix = asmap; - while (!asmap_prefix.empty() && asmap_prefix.size() + 7 > asmap.size() && asmap_prefix.back() == false) asmap_prefix.pop_back(); + while (!asmap_prefix.empty() && asmap_prefix.size() + 7 > asmap.size() && asmap_prefix.back() == false) { + asmap_prefix.pop_back(); + } while (!asmap_prefix.empty()) { asmap_prefix.pop_back(); assert(!SanityCheckASMap(asmap_prefix, buffer.size() - 1 - sep_pos)); diff --git a/src/test/fuzz/block_header.cpp b/src/test/fuzz/block_header.cpp index f0ddae14f6..09c2b4a951 100644 --- a/src/test/fuzz/block_header.cpp +++ b/src/test/fuzz/block_header.cpp @@ -2,7 +2,6 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include #include #include #include @@ -11,13 +10,14 @@ #include #include +#include #include #include void test_one_input(const std::vector& buffer) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); - const Optional block_header = ConsumeDeserializable(fuzzed_data_provider); + const std::optional block_header = ConsumeDeserializable(fuzzed_data_provider); if (!block_header) { return; } diff --git a/src/test/fuzz/blockfilter.cpp b/src/test/fuzz/blockfilter.cpp index be9320dcbf..7232325a20 100644 --- a/src/test/fuzz/blockfilter.cpp +++ b/src/test/fuzz/blockfilter.cpp @@ -3,19 +3,19 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include #include #include +#include #include #include void test_one_input(const std::vector& buffer) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); - const Optional block_filter = ConsumeDeserializable(fuzzed_data_provider); + const std::optional block_filter = ConsumeDeserializable(fuzzed_data_provider); if (!block_filter) { return; } diff --git a/src/test/fuzz/bloom_filter.cpp b/src/test/fuzz/bloom_filter.cpp index 7039bf16c1..d955c71bc9 100644 --- a/src/test/fuzz/bloom_filter.cpp +++ b/src/test/fuzz/bloom_filter.cpp @@ -3,7 +3,6 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include #include @@ -12,6 +11,7 @@ #include #include +#include #include #include @@ -35,7 +35,7 @@ void test_one_input(const std::vector& buffer) break; } case 1: { - const Optional out_point = ConsumeDeserializable(fuzzed_data_provider); + const std::optional out_point = ConsumeDeserializable(fuzzed_data_provider); if (!out_point) { break; } @@ -46,7 +46,7 @@ void test_one_input(const std::vector& buffer) break; } case 2: { - const Optional u256 = ConsumeDeserializable(fuzzed_data_provider); + const std::optional u256 = ConsumeDeserializable(fuzzed_data_provider); if (!u256) { break; } @@ -57,7 +57,7 @@ void test_one_input(const std::vector& buffer) break; } case 3: { - const Optional mut_tx = ConsumeDeserializable(fuzzed_data_provider); + const std::optional mut_tx = ConsumeDeserializable(fuzzed_data_provider); if (!mut_tx) { break; } diff --git a/src/test/fuzz/chain.cpp b/src/test/fuzz/chain.cpp index b322516cc7..47c71850ce 100644 --- a/src/test/fuzz/chain.cpp +++ b/src/test/fuzz/chain.cpp @@ -3,18 +3,18 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include #include #include +#include #include void test_one_input(const std::vector& buffer) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); - Optional disk_block_index = ConsumeDeserializable(fuzzed_data_provider); + std::optional disk_block_index = ConsumeDeserializable(fuzzed_data_provider); if (!disk_block_index) { return; } diff --git a/src/test/fuzz/checkqueue.cpp b/src/test/fuzz/checkqueue.cpp index 2ed097b827..c69043bb6b 100644 --- a/src/test/fuzz/checkqueue.cpp +++ b/src/test/fuzz/checkqueue.cpp @@ -3,7 +3,6 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include #include #include diff --git a/src/test/fuzz/cuckoocache.cpp b/src/test/fuzz/cuckoocache.cpp index f674efe1b1..5b45aa79d8 100644 --- a/src/test/fuzz/cuckoocache.cpp +++ b/src/test/fuzz/cuckoocache.cpp @@ -3,7 +3,6 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include -#include #include