From 320f7e418cb16684bd7c41d4300d55dfec5a5be1 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Mon, 4 Feb 2019 17:55:30 +0000 Subject: [PATCH] - Add upstream patch to fix occasional crashes See https://github.com/PurpleI2P/i2pd/issues/1290 --- security/i2pd/Makefile | 1 + ...h-bc3f02cb6b89cb00b83439330c942006039e1cba | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 security/i2pd/files/patch-bc3f02cb6b89cb00b83439330c942006039e1cba diff --git a/security/i2pd/Makefile b/security/i2pd/Makefile index b24672ec1a35..141be77e89d2 100644 --- a/security/i2pd/Makefile +++ b/security/i2pd/Makefile @@ -3,6 +3,7 @@ PORTNAME= i2pd PORTVERSION= 2.23.0 +PORTREVISION= 1 CATEGORIES= security net-p2p MAINTAINER= amdmi3@FreeBSD.org diff --git a/security/i2pd/files/patch-bc3f02cb6b89cb00b83439330c942006039e1cba b/security/i2pd/files/patch-bc3f02cb6b89cb00b83439330c942006039e1cba new file mode 100644 index 000000000000..97ed3061cac9 --- /dev/null +++ b/security/i2pd/files/patch-bc3f02cb6b89cb00b83439330c942006039e1cba @@ -0,0 +1,52 @@ +From bc3f02cb6b89cb00b83439330c942006039e1cba Mon Sep 17 00:00:00 2001 +From: orignal +Date: Thu, 31 Jan 2019 16:03:10 -0500 +Subject: [PATCH] fix #1290. copy correct size if message didn't fit previous + +--- + libi2pd/TunnelGateway.cpp | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +diff --git a/libi2pd/TunnelGateway.cpp b/libi2pd/TunnelGateway.cpp +index e6bfdd844..7d0069a93 100644 +--- libi2pd/TunnelGateway.cpp ++++ libi2pd/TunnelGateway.cpp +@@ -51,6 +51,19 @@ namespace tunnel + // create fragments + const std::shared_ptr & msg = block.data; + size_t fullMsgLen = diLen + msg->GetLength () + 2; // delivery instructions + payload + 2 bytes length ++ ++ if (!messageCreated && fullMsgLen > m_RemainingSize) // check if we should complete previous message ++ { ++ size_t numFollowOnFragments = fullMsgLen / TUNNEL_DATA_MAX_PAYLOAD_SIZE; ++ // length of bytes doesn't fit full tunnel message ++ // every follow-on fragment adds 7 bytes ++ size_t nonFit = (fullMsgLen + numFollowOnFragments*7) % TUNNEL_DATA_MAX_PAYLOAD_SIZE; ++ if (!nonFit || nonFit > m_RemainingSize) ++ { ++ CompleteCurrentTunnelDataMessage (); ++ CreateCurrentTunnelDataMessage (); ++ } ++ } + if (fullMsgLen <= m_RemainingSize) + { + // message fits. First and last fragment +@@ -65,18 +78,6 @@ namespace tunnel + } + else + { +- if (!messageCreated) // check if we should complete previous message +- { +- size_t numFollowOnFragments = fullMsgLen / TUNNEL_DATA_MAX_PAYLOAD_SIZE; +- // length of bytes don't fit full tunnel message +- // every follow-on fragment adds 7 bytes +- size_t nonFit = (fullMsgLen + numFollowOnFragments*7) % TUNNEL_DATA_MAX_PAYLOAD_SIZE; +- if (!nonFit || nonFit > m_RemainingSize) +- { +- CompleteCurrentTunnelDataMessage (); +- CreateCurrentTunnelDataMessage (); +- } +- } + if (diLen + 6 <= m_RemainingSize) + { + // delivery instructions fit