Browse Source

Merge pull request #1016 from majestrate/fix-streaming-overflow

fix overflow
pull/1019/head
orignal 7 years ago committed by GitHub
parent
commit
40cfbc5d61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      libi2pd/Streaming.cpp

7
libi2pd/Streaming.cpp

@ -244,6 +244,8 @@ namespace stream
{ {
uint8_t signature[256]; uint8_t signature[256];
auto signatureLen = m_RemoteIdentity->GetSignatureLen (); auto signatureLen = m_RemoteIdentity->GetSignatureLen ();
if(signatureLen <= sizeof(signature))
{
memcpy (signature, optionData, signatureLen); memcpy (signature, optionData, signatureLen);
memset (const_cast<uint8_t *>(optionData), 0, signatureLen); memset (const_cast<uint8_t *>(optionData), 0, signatureLen);
if (!m_RemoteIdentity->Verify (packet->GetBuffer (), packet->GetLength (), signature)) if (!m_RemoteIdentity->Verify (packet->GetBuffer (), packet->GetLength (), signature))
@ -255,6 +257,11 @@ namespace stream
memcpy (const_cast<uint8_t *>(optionData), signature, signatureLen); memcpy (const_cast<uint8_t *>(optionData), signature, signatureLen);
optionData += signatureLen; optionData += signatureLen;
} }
else
{
LogPrint(eLogError, "Streaming: Signature too big, ", signatureLen, " bytes");
}
}
packet->offset = packet->GetPayload () - packet->buf; packet->offset = packet->GetPayload () - packet->buf;
if (packet->GetLength () > 0) if (packet->GetLength () > 0)

Loading…
Cancel
Save