From 8a6fe0f3210c3082439dfe441a61ad1bb9c32950 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 27 Jul 2022 10:55:08 -0400 Subject: [PATCH] check if address type matches peer's address type for peer test msg 1 --- libi2pd/SSU2Session.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index 8e3b3445..96635cec 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -148,8 +148,11 @@ namespace transport // peer test block uint8_t payload[SSU2_MAX_PACKET_SIZE]; size_t payloadSize = CreatePeerTestBlock (payload, m_MaxPayloadSize, nonce); - payloadSize += CreatePaddingBlock (payload + payloadSize, m_MaxPayloadSize - payloadSize); - SendData (payload, payloadSize); + if (payloadSize > 0) + { + payloadSize += CreatePaddingBlock (payload + payloadSize, m_MaxPayloadSize - payloadSize); + SendData (payload, payloadSize); + } } void SSU2Session::SendKeepAlive () @@ -2314,7 +2317,8 @@ namespace transport size_t SSU2Session::CreatePeerTestBlock (uint8_t * buf, size_t len, uint32_t nonce) { auto localAddress = FindLocalAddress (); - if (!localAddress || !localAddress->port || localAddress->host.is_unspecified ()) + if (!localAddress || !localAddress->port || localAddress->host.is_unspecified () || + localAddress->host.is_v4 () != m_RemoteEndpoint.address ().is_v4 ()) { LogPrint (eLogWarning, "SSU2: Can't find local address for peer test"); return 0;