- Add upstream patch to fix occasional crashes
See https://github.com/PurpleI2P/i2pd/issues/1290
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
PORTNAME= i2pd
|
||||
PORTVERSION= 2.23.0
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= security net-p2p
|
||||
|
||||
MAINTAINER= amdmi3@FreeBSD.org
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From bc3f02cb6b89cb00b83439330c942006039e1cba Mon Sep 17 00:00:00 2001
|
||||
From: orignal <i2porignal@yandex.ru>
|
||||
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<I2NPMessage> & 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
|
||||
Reference in New Issue
Block a user