From f7264fff0a098f8b6354c7373b8790791c25dd07 Mon Sep 17 00:00:00 2001 From: Lucas Ontivero Date: Thu, 10 Dec 2020 14:26:58 -0300 Subject: [PATCH] Check if Cjdns address is valid --- src/netaddress.cpp | 5 +++++ src/test/net_tests.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/netaddress.cpp b/src/netaddress.cpp index 35e9161f587..b1f9d32d34c 100644 --- a/src/netaddress.cpp +++ b/src/netaddress.cpp @@ -437,6 +437,11 @@ bool CNetAddr::IsValid() const return false; } + // CJDNS addresses always start with 0xfc + if (IsCJDNS() && (m_addr[0] != 0xFC)) { + return false; + } + // documentation IPv6 address if (IsRFC3849()) return false; diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp index cec4a8df614..c86974ba5bd 100644 --- a/src/test/net_tests.cpp +++ b/src/test/net_tests.cpp @@ -604,6 +604,16 @@ BOOST_AUTO_TEST_CASE(cnetaddr_unserialize_v2) BOOST_CHECK_EQUAL(addr.ToString(), "fc00:1:2:3:4:5:6:7"); BOOST_REQUIRE(s.empty()); + // Invalid CJDNS, wrong prefix. + s << MakeSpan(ParseHex("06" // network type (CJDNS) + "10" // address length + "aa000001000200030004000500060007" // address + )); + s >> addr; + BOOST_CHECK(addr.IsCJDNS()); + BOOST_CHECK(!addr.IsValid()); + BOOST_REQUIRE(s.empty()); + // Invalid CJDNS, with bogus length. s << MakeSpan(ParseHex("06" // network type (CJDNS) "01" // address length