Skip to content

Commit 4192a74

Browse files
committed
p2p: ignore torv2-in-ipv6 addresses in SetLegacyIPv6()
1 parent 1d631e9 commit 4192a74

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

src/netaddress.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ void CNetAddr::SetLegacyIPv6(Span<const uint8_t> ipv6)
146146
m_net = NET_IPV4;
147147
skip = sizeof(IPV4_IN_IPV6_PREFIX);
148148
} else if (HasPrefix(ipv6, TORV2_IN_IPV6_PREFIX)) {
149-
// TORv2-in-IPv6
150-
m_net = NET_ONION;
151-
skip = sizeof(TORV2_IN_IPV6_PREFIX);
149+
// TORv2-in-IPv6 (unsupported). Unserialize as !IsValid(), thus ignoring them.
150+
// Mimic a default-constructed CNetAddr object which is !IsValid() and thus
151+
// will not be gossiped, but continue reading next addresses from the stream.
152+
m_net = NET_IPV6;
153+
m_addr.assign(ADDR_IPV6_SIZE, 0x0);
154+
return;
152155
} else if (HasPrefix(ipv6, INTERNAL_IN_IPV6_PREFIX)) {
153156
// Internal-in-IPv6
154157
m_net = NET_INTERNAL;

src/test/netbase_tests.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,12 @@ static CNetAddr CreateInternal(const std::string& host)
4444

4545
BOOST_AUTO_TEST_CASE(netbase_networks)
4646
{
47-
BOOST_CHECK(ResolveIP("127.0.0.1").GetNetwork() == NET_UNROUTABLE);
48-
BOOST_CHECK(ResolveIP("::1").GetNetwork() == NET_UNROUTABLE);
49-
BOOST_CHECK(ResolveIP("8.8.8.8").GetNetwork() == NET_IPV4);
50-
BOOST_CHECK(ResolveIP("2001::8888").GetNetwork() == NET_IPV6);
51-
BOOST_CHECK(ResolveIP("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca").GetNetwork() == NET_ONION);
52-
BOOST_CHECK(CreateInternal("foo.com").GetNetwork() == NET_INTERNAL);
53-
47+
BOOST_CHECK(ResolveIP("127.0.0.1").GetNetwork() == NET_UNROUTABLE);
48+
BOOST_CHECK(ResolveIP("::1").GetNetwork() == NET_UNROUTABLE);
49+
BOOST_CHECK(ResolveIP("8.8.8.8").GetNetwork() == NET_IPV4);
50+
BOOST_CHECK(ResolveIP("2001::8888").GetNetwork() == NET_IPV6);
51+
BOOST_CHECK(ResolveIP("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion").GetNetwork() == NET_ONION);
52+
BOOST_CHECK(CreateInternal("foo.com").GetNetwork() == NET_INTERNAL);
5453
}
5554

5655
BOOST_AUTO_TEST_CASE(netbase_properties)
@@ -73,7 +72,7 @@ BOOST_AUTO_TEST_CASE(netbase_properties)
7372
BOOST_CHECK(ResolveIP("2001:20::").IsRFC7343());
7473
BOOST_CHECK(ResolveIP("FE80::").IsRFC4862());
7574
BOOST_CHECK(ResolveIP("64:FF9B::").IsRFC6052());
76-
BOOST_CHECK(ResolveIP("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca").IsTor());
75+
BOOST_CHECK(ResolveIP("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion").IsTor());
7776
BOOST_CHECK(ResolveIP("127.0.0.1").IsLocal());
7877
BOOST_CHECK(ResolveIP("::1").IsLocal());
7978
BOOST_CHECK(ResolveIP("8.8.8.8").IsRoutable());
@@ -326,7 +325,6 @@ BOOST_AUTO_TEST_CASE(netbase_getgroup)
326325
BOOST_CHECK(ResolveIP("64:FF9B::102:304").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_IPV4, 1, 2})); // RFC6052
327326
BOOST_CHECK(ResolveIP("2002:102:304:9999:9999:9999:9999:9999").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_IPV4, 1, 2})); // RFC3964
328327
BOOST_CHECK(ResolveIP("2001:0:9999:9999:9999:9999:FEFD:FCFB").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_IPV4, 1, 2})); // RFC4380
329-
BOOST_CHECK(ResolveIP("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_ONION, 239})); // Tor
330328
BOOST_CHECK(ResolveIP("2001:470:abcd:9999:9999:9999:9999:9999").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_IPV6, 32, 1, 4, 112, 175})); //he.net
331329
BOOST_CHECK(ResolveIP("2001:2001:9999:9999:9999:9999:9999:9999").GetGroup(asmap) == std::vector<unsigned char>({(unsigned char)NET_IPV6, 32, 1, 32, 1})); //IPv6
332330

0 commit comments

Comments
 (0)