From b2e889b5d4ed82bb341328e7356490daa7bb5df9 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Mon, 2 Oct 2017 21:51:39 -0700 Subject: [PATCH] [operational-dataset] add length check when reading network name (#2226) --- src/core/meshcop/dataset_local.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/meshcop/dataset_local.cpp b/src/core/meshcop/dataset_local.cpp index 07d888d91..0ac9cdb46 100644 --- a/src/core/meshcop/dataset_local.cpp +++ b/src/core/meshcop/dataset_local.cpp @@ -195,8 +195,15 @@ otError DatasetLocal::Get(otOperationalDataset &aDataset) const case Tlv::kNetworkName: { const NetworkNameTlv *tlv = static_cast(cur); - memcpy(aDataset.mNetworkName.m8, tlv->GetNetworkName(), tlv->GetLength()); - aDataset.mNetworkName.m8[tlv->GetLength()] = '\0'; + uint8_t length = tlv->GetLength(); + + if (length > sizeof(aDataset.mNetworkName) - 1) + { + length = sizeof(aDataset.mNetworkName) - 1; + } + + memcpy(aDataset.mNetworkName.m8, tlv->GetNetworkName(), length); + aDataset.mNetworkName.m8[length] = '\0'; aDataset.mIsNetworkNameSet = true; break; }