From d25010571170def8522eb2c70d694bd3ce7689f2 Mon Sep 17 00:00:00 2001 From: Shu Chen Date: Thu, 19 Jan 2017 13:36:22 +0800 Subject: [PATCH] Skip extended tlv when searching for Base TLV (#1172) --- src/core/common/tlvs.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/core/common/tlvs.cpp b/src/core/common/tlvs.cpp index edac6149c..fa4d67f7d 100644 --- a/src/core/common/tlvs.cpp +++ b/src/core/common/tlvs.cpp @@ -67,13 +67,24 @@ ThreadError Tlv::GetOffset(const Message &aMessage, uint8_t aType, uint16_t &aOf { aMessage.Read(offset, sizeof(Tlv), &tlv); - if (tlv.GetType() == aType && (offset + sizeof(tlv) + tlv.GetLength()) <= end) + // skip extended TLV + if (tlv.GetLength() == kExtendedLength) + { + uint16_t length = 0; + + offset += sizeof(tlv); + aMessage.Read(offset, sizeof(length), &length); + offset += sizeof(length) + HostSwap16(length); + } + else if (tlv.GetType() == aType && (offset + sizeof(tlv) + tlv.GetLength()) <= end) { aOffset = offset; ExitNow(error = kThreadError_None); } - - offset += sizeof(tlv) + tlv.GetLength(); + else + { + offset += sizeof(tlv) + tlv.GetLength(); + } } exit: