diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/NTCP2.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/NTCP2.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/NTCP2.cpp 2026-07-30 12:05:41.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/NTCP2.cpp 2026-07-30 11:05:38.000000000 +0000 @@ -397,5 +397,5 @@ if (m_BufferLen > NTCP2_SESSION_HANDSHAKE_MAX_SIZE) m_IsLongPadding = true; m3p2Len = bufbe16toh (options + 4); - if (m3p2Len < 19) // 16 bytes MAC + at least 1 byte block type + 2 bytes block size + if (m3p2Len < 16) { LogPrint (eLogWarning, "NTCP2: SessionRequest m3p2len=", m3p2Len, " is too short"); @@ -844,5 +844,9 @@ if (paddingLen > 0) { - if (m_Establisher->m_BufferLen + paddingLen <= m_Establisher->m_MaxMsgSize) +#if OPENSSL_PQ + if (paddingLen <= m_Establisher->m_MaxMsgSize - 80) +#else + if (paddingLen <= m_Establisher->m_MaxMsgSize - 64) +#endif { boost::asio::async_read (m_Socket, boost::asio::buffer(m_Establisher->m_Buffer + m_Establisher->m_BufferLen, paddingLen), boost::asio::transfer_all (), @@ -986,5 +990,5 @@ } auto size = bufbe16toh (buf->data () + 1); - if (size + 3 > (int)buf->size () || size > i2p::data::MAX_RI_BUFFER_SIZE + 1) + if (size > buf->size () - 3 || size > i2p::data::MAX_RI_BUFFER_SIZE + 1) { LogPrint (eLogError, "NTCP2: Unexpected RouterInfo size ", size, " in SessionConfirmed"); @@ -1302,9 +1306,4 @@ case eNTCP2BlkRouterInfo: { - if (size < 1) - { - LogPrint (eLogWarning, "NTCP2: RouterInfo block is too short"); - break; - } LogPrint (eLogDebug, "NTCP2: RouterInfo flag=", (int)frame[offset]); if (size <= i2p::data::MAX_RI_BUFFER_SIZE + 1) @@ -1785,4 +1784,8 @@ else if (address->IsV6() && (context.SupportsV6 () || context.SupportsMesh ())) { +#if defined(__HAIKU__) + LogPrint (eLogInfo, "NTCP2: Can't listen v6 TCP port ", address->port, ". IPV6_V6ONLY is not supported"); + continue; // IPV6_V6ONLY is not supported. Don't listen ipv6 +#endif m_NTCP2V6Acceptor.reset (new boost::asio::ip::tcp::acceptor (GetService ())); try diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/SSU2.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/SSU2.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/SSU2.cpp 2026-07-30 12:05:41.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/SSU2.cpp 2026-07-30 11:05:38.000000000 +0000 @@ -290,5 +290,12 @@ socket.open (localEndpoint.protocol ()); if (localEndpoint.address ().is_v6 ()) +#if !defined(__HAIKU__) socket.set_option (boost::asio::ip::v6_only (true)); +#else + { + LogPrint (eLogWarning, "SSU2: Socket option IPV6_V6ONLY is not supported"); + m_IsForcedFirewalled6 = true; // IPV6_V6ONLY is not supported, always Firewalled for ipv6 + } +#endif uint64_t bufferSize = i2p::context.GetBandwidthLimit() * 1024 / 5; // max lag = 200ms