From 016b1b152327c27b2f46accd272b49da8a16ed9f Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Wed, 26 Jun 2019 03:43:41 -0700 Subject: [PATCH] [address-resolver] fix TLV length in response messages (#3945) --- src/core/thread/address_resolver.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/thread/address_resolver.cpp b/src/core/thread/address_resolver.cpp index 15e791436..b359bc1bf 100644 --- a/src/core/thread/address_resolver.cpp +++ b/src/core/thread/address_resolver.cpp @@ -371,9 +371,11 @@ void AddressResolver::HandleAddressNotification(Coap::Message &aMessage, const I SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv)); VerifyOrExit(targetTlv.IsValid()); + targetTlv.Init(); // reset TLV length SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kMeshLocalEid, sizeof(mlIidTlv), mlIidTlv)); VerifyOrExit(mlIidTlv.IsValid()); + mlIidTlv.Init(); // reset TLV length SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kRloc16, sizeof(rloc16Tlv), rloc16Tlv)); VerifyOrExit(rloc16Tlv.IsValid()); @@ -520,9 +522,11 @@ void AddressResolver::HandleAddressError(Coap::Message &aMessage, const Ip6::Mes SuccessOrExit(error = ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv)); VerifyOrExit(targetTlv.IsValid(), error = OT_ERROR_PARSE); + targetTlv.Init(); // reset TLV length SuccessOrExit(error = ThreadTlv::GetTlv(aMessage, ThreadTlv::kMeshLocalEid, sizeof(mlIidTlv), mlIidTlv)); VerifyOrExit(mlIidTlv.IsValid(), error = OT_ERROR_PARSE); + mlIidTlv.Init(); // reset TLV length for (const Ip6::NetifUnicastAddress *address = Get().GetUnicastAddresses(); address; address = address->GetNext()) @@ -589,6 +593,7 @@ void AddressResolver::HandleAddressQuery(Coap::Message &aMessage, const Ip6::Mes SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv)); VerifyOrExit(targetTlv.IsValid()); + targetTlv.Init(); // reset TLV length mlIidTlv.Init();