diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HTTPServer.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HTTPServer.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HTTPServer.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HTTPServer.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -710,7 +710,5 @@ { s << "I2CP " << tr("Local Destination") << ":
\r\n
\r\n"; - std::shared_ptr session; - try { session = i2cpServer->FindSessionByID ((uint16_t)std::stoi (id)); } - catch (std::exception&) {} + auto session = i2cpServer->FindSessionByID ((uint16_t)std::stoi (id)); if (session) ShowLeaseSetDestination (s, session->GetDestination (), 0); @@ -1508,17 +1506,5 @@ std::string token = params["token"]; - if (token.empty ()) - { - ShowError(s, tr("Invalid token")); - return; - } - int tokenValue; - try { tokenValue = std::stoi (token); } - catch (std::exception&) - { - ShowError(s, tr("Invalid token")); - return; - } - if (m_Tokens.find (tokenValue) == m_Tokens.end ()) + if (token.empty () || m_Tokens.find (std::stoi (token)) == m_Tokens.end ()) { ShowError(s, tr("Invalid token")); diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControl.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControl.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControl.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControl.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -261,9 +261,4 @@ return; // TODO: } - if (contentLength > I2P_CONTROL_MAX_CONTENT_LENGTH) - { - LogPrint (eLogError, "I2PControl: Content-Length ", contentLength, " exceeds maximum allowed size"); - return; - } std::streamoff rem = contentLength + ss.tellg () - bytes_transferred; // more bytes to read while (rem > 0) // read in chunks to prevent buffer overflow diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControl.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControl.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/I2PControl.h 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/I2PControl.h 2026-09-16 12:31:21.000000000 +0000 @@ -29,5 +29,4 @@ const size_t I2P_CONTROL_MAX_REQUEST_SIZE = 1024; typedef std::array I2PControlBuffer; - const size_t I2P_CONTROL_MAX_CONTENT_LENGTH = 65536; // sanity limit on declared HTTP Content-Length const uint64_t I2P_CONTROL_TOKEN_LIFETIME = 60*60; // 1 hour, in seconds diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Identity.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Identity.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Identity.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Identity.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -557,5 +557,4 @@ { // offline information - if (ret + 6 > len) return 0; // expires(4) + key type(2) const uint8_t * offlineInfo = buf + ret; uint32_t expires = bufbe32toh (buf + ret); ret += 4; // expires timestamp diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/NetDb.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/NetDb.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/NetDb.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/NetDb.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -1420,5 +1420,4 @@ { auto ts = i2p::util::GetMillisecondsSinceEpoch (); - std::lock_guard lock(m_LeaseSetsMutex); for (auto it = m_LeaseSets.begin (); it != m_LeaseSets.end ();) { diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Reseed.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Reseed.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Reseed.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Reseed.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -271,5 +271,5 @@ { // TODO: implement all signature types - if (signatureType == SIGNING_KEY_TYPE_RSA_SHA512_4096 && signatureLength >= SHA512_DIGEST_LENGTH) + if (signatureType == SIGNING_KEY_TYPE_RSA_SHA512_4096) { size_t pos = s.tellg (); @@ -283,5 +283,5 @@ { // calculate digest - uint8_t digest[SHA512_DIGEST_LENGTH]; + uint8_t digest[64]; SHA512 (tbs, tbsLen, digest); // encrypt signature @@ -295,5 +295,5 @@ // digest is right aligned // we can't use RSA_verify due wrong padding in SU3 - if (memcmp (enSigBuf + (signatureLength - SHA512_DIGEST_LENGTH), digest, SHA512_DIGEST_LENGTH)) + if (memcmp (enSigBuf + (signatureLength - 64), digest, 64)) LogPrint (eLogWarning, "Reseed: SU3 signature verification failed"); else diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/RouterInfo.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/RouterInfo.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/RouterInfo.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/RouterInfo.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -645,10 +645,9 @@ std::string_view RouterInfo::ExtractString (const uint8_t * buf, size_t len) const { - if (!len) return {}; uint8_t l = buf[0]; - if (l > len - 1) + if (l > len) { LogPrint (eLogWarning, "RouterInfo: String length ", (int)l, " exceeds buffer size ", len); - l = len - 1; + l = len; } return { (const char *)(buf + 1), l }; diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/util.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/util.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/util.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/util.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -273,5 +273,5 @@ if (!len) return { }; uint8_t l = buf[0]; - if (l > len - 1) l = len - 1; + if (l > len) l = len; return { (const char *)(buf + 1), l }; } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/I2CP.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/I2CP.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/I2CP.cpp 2026-09-16 13:00:11.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/I2CP.cpp 2026-09-16 12:31:21.000000000 +0000 @@ -883,9 +883,4 @@ void I2CPSession::CreateLeaseSet2MessageHandler (const uint8_t * buf, size_t len) { - if (len < 3) - { - LogPrint (eLogError, "I2CP: CreateLeaseSet2Message is too short ", len); - return; - } uint16_t sessionID = bufbe16toh (buf); if (sessionID == m_SessionID) @@ -903,9 +898,4 @@ offset += ls.GetBufferLen (); // private keys - if (offset >= len) - { - LogPrint (eLogError, "I2CP: CreateLeaseSet2Message is too short for private keys"); - return; - } int numPrivateKeys = buf[offset]; offset++; for (int i = 0; i < numPrivateKeys; i++) @@ -1085,9 +1075,4 @@ void I2CPSession::DestLookupMessageHandler (const uint8_t * buf, size_t len) { - if (len < 32) - { - LogPrint (eLogError, "I2CP: DestLookupMessage is too short ", len); - return; - } if (m_Destination) {