From fa0f4157098ea68169ced44730986d0ed2c3a5aa Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Mon, 12 Oct 2020 22:57:37 +0200 Subject: [PATCH] net: Assume that SetCommonVersion is called at most once per peer --- src/net.h | 6 ++++-- src/test/fuzz/net.cpp | 23 ++++++++++------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/net.h b/src/net.h index 21ee5e7808..77aaaac5b1 100644 --- a/src/net.h +++ b/src/net.h @@ -24,14 +24,15 @@ #include #include #include +#include #include +#include #include #include #include -#include #include -#include +#include class CScheduler; class CNode; @@ -1131,6 +1132,7 @@ public: void SetCommonVersion(int greatest_common_version) { + Assume(m_greatest_common_version == INIT_PROTO_VERSION); m_greatest_common_version = greatest_common_version; } int GetCommonVersion() const diff --git a/src/test/fuzz/net.cpp b/src/test/fuzz/net.cpp index a0c8b7aac5..81e36b3f06 100644 --- a/src/test/fuzz/net.cpp +++ b/src/test/fuzz/net.cpp @@ -48,8 +48,9 @@ void test_one_input(const std::vector& buffer) fuzzed_data_provider.ConsumeRandomLengthString(32), fuzzed_data_provider.PickValueInArray({ConnectionType::INBOUND, ConnectionType::OUTBOUND_FULL_RELAY, ConnectionType::MANUAL, ConnectionType::FEELER, ConnectionType::BLOCK_RELAY, ConnectionType::ADDR_FETCH}), fuzzed_data_provider.ConsumeBool()}; + node.SetCommonVersion(fuzzed_data_provider.ConsumeIntegral()); while (fuzzed_data_provider.ConsumeBool()) { - switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 11)) { + switch (fuzzed_data_provider.ConsumeIntegralInRange(0, 10)) { case 0: { node.CloseSocketDisconnect(); break; @@ -59,10 +60,6 @@ void test_one_input(const std::vector& buffer) break; } case 2: { - node.SetCommonVersion(fuzzed_data_provider.ConsumeIntegral()); - break; - } - case 3: { const std::vector asmap = ConsumeRandomLengthBitVector(fuzzed_data_provider); if (!SanityCheckASMap(asmap)) { break; @@ -71,18 +68,18 @@ void test_one_input(const std::vector& buffer) node.copyStats(stats, asmap); break; } - case 4: { + case 3: { const CNode* add_ref_node = node.AddRef(); assert(add_ref_node == &node); break; } - case 5: { + case 4: { if (node.GetRefCount() > 0) { node.Release(); } break; } - case 6: { + case 5: { if (node.m_addr_known == nullptr) { break; } @@ -93,7 +90,7 @@ void test_one_input(const std::vector& buffer) node.AddAddressKnown(*addr_opt); break; } - case 7: { + case 6: { if (node.m_addr_known == nullptr) { break; } @@ -105,7 +102,7 @@ void test_one_input(const std::vector& buffer) node.PushAddress(*addr_opt, fast_random_context); break; } - case 8: { + case 7: { const std::optional inv_opt = ConsumeDeserializable(fuzzed_data_provider); if (!inv_opt) { break; @@ -113,11 +110,11 @@ void test_one_input(const std::vector& buffer) node.AddKnownTx(inv_opt->hash); break; } - case 9: { + case 8: { node.PushTxInventory(ConsumeUInt256(fuzzed_data_provider)); break; } - case 10: { + case 9: { const std::optional service_opt = ConsumeDeserializable(fuzzed_data_provider); if (!service_opt) { break; @@ -125,7 +122,7 @@ void test_one_input(const std::vector& buffer) node.SetAddrLocal(*service_opt); break; } - case 11: { + case 10: { const std::vector b = ConsumeRandomLengthByteVector(fuzzed_data_provider); bool complete; node.ReceiveMsgBytes(b, complete);