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; }