[lowpan] indicate compress error when processing beyond msg buf (#3597)

This commit is contained in:
Jonathan Hui
2019-02-19 20:46:28 -08:00
committed by Jonathan Hui
parent 62e4c0a2e9
commit d8d1d91422
+11 -4
View File
@@ -265,7 +265,8 @@ otError Lowpan::Compress(Message & aMessage,
uint8_t ecn = 0;
uint8_t dscp = 0;
aMessage.Read(aMessage.GetOffset(), sizeof(ip6Header), &ip6Header);
VerifyOrExit(aMessage.Read(aMessage.GetOffset(), sizeof(ip6Header), &ip6Header) == sizeof(ip6Header),
error = OT_ERROR_PARSE);
if (networkData.GetContext(ip6Header.GetSource(), srcContext) != OT_ERROR_NONE || srcContext.mCompressFlag == false)
{
@@ -455,7 +456,8 @@ otError Lowpan::CompressExtensionHeader(Message &aMessage, BufferWriter &aBuf, u
uint16_t offset;
uint8_t tmpByte;
aMessage.Read(aMessage.GetOffset(), sizeof(extHeader), &extHeader);
VerifyOrExit(aMessage.Read(aMessage.GetOffset(), sizeof(extHeader), &extHeader) == sizeof(extHeader),
error = OT_ERROR_PARSE);
aMessage.MoveOffset(sizeof(extHeader));
tmpByte = kExtHdrDispatch | kExtHdrEidHbh;
@@ -487,7 +489,8 @@ otError Lowpan::CompressExtensionHeader(Message &aMessage, BufferWriter &aBuf, u
while (offset < len + aMessage.GetOffset())
{
aMessage.Read(offset, sizeof(optionHeader), &optionHeader);
VerifyOrExit(aMessage.Read(offset, sizeof(optionHeader), &optionHeader) == sizeof(optionHeader),
error = OT_ERROR_PARSE);
if (optionHeader.GetType() == Ip6::OptionPad1::kType)
{
@@ -512,6 +515,8 @@ otError Lowpan::CompressExtensionHeader(Message &aMessage, BufferWriter &aBuf, u
len -= padLength;
}
VerifyOrExit(aMessage.GetOffset() + len + padLength <= aMessage.GetLength(), error = OT_ERROR_PARSE);
aNextHeader = static_cast<uint8_t>(extHeader.GetNextHeader());
SuccessOrExit(error = buf.Write(len));
@@ -540,7 +545,9 @@ otError Lowpan::CompressUdp(Message &aMessage, BufferWriter &aBuf)
uint16_t source;
uint16_t destination;
aMessage.Read(aMessage.GetOffset(), sizeof(udpHeader), &udpHeader);
VerifyOrExit(aMessage.Read(aMessage.GetOffset(), sizeof(udpHeader), &udpHeader) == sizeof(udpHeader),
error = OT_ERROR_PARSE);
source = udpHeader.GetSourcePort();
destination = udpHeader.GetDestinationPort();