Browse Source

check option and packet length

pull/2094/head
orignal 3 months ago
parent
commit
09dbe9fc03
  1. 5
      libi2pd/Streaming.cpp
  2. 2
      libi2pd/Streaming.h

5
libi2pd/Streaming.cpp

@ -297,6 +297,11 @@ namespace stream
{ {
const uint8_t * optionData = packet->GetOptionData (); const uint8_t * optionData = packet->GetOptionData ();
size_t optionSize = packet->GetOptionSize (); size_t optionSize = packet->GetOptionSize ();
if (optionSize > packet->len)
{
LogPrint (eLogInfo, "Streaming: Invalid option size ", optionSize, " Discarded");
return false;
}
if (flags & PACKET_FLAG_DELAY_REQUESTED) if (flags & PACKET_FLAG_DELAY_REQUESTED)
{ {
if (!m_IsAckSendScheduled) if (!m_IsAckSendScheduled)

2
libi2pd/Streaming.h

@ -78,7 +78,7 @@ namespace stream
Packet (): len (0), offset (0), sendTime (0), resent (false) {}; Packet (): len (0), offset (0), sendTime (0), resent (false) {};
uint8_t * GetBuffer () { return buf + offset; }; uint8_t * GetBuffer () { return buf + offset; };
size_t GetLength () const { return len - offset; }; size_t GetLength () const { return len > offset ? len - offset : 0; };
uint32_t GetSendStreamID () const { return bufbe32toh (buf); }; uint32_t GetSendStreamID () const { return bufbe32toh (buf); };
uint32_t GetReceiveStreamID () const { return bufbe32toh (buf + 4); }; uint32_t GetReceiveStreamID () const { return bufbe32toh (buf + 4); };

Loading…
Cancel
Save