diff --git a/src/core/meshcop/dataset.cpp b/src/core/meshcop/dataset.cpp index dbb013b95..a123f2d22 100644 --- a/src/core/meshcop/dataset.cpp +++ b/src/core/meshcop/dataset.cpp @@ -188,6 +188,7 @@ void Dataset::Get(otOperationalDataset &aDataset) const { const NetworkNameTlv *tlv = static_cast(cur); memcpy(aDataset.mNetworkName.m8, tlv->GetNetworkName(), tlv->GetLength()); + aDataset.mNetworkName.m8[tlv->GetLength()] = '\0'; aDataset.mIsNetworkNameSet = true; break; } diff --git a/src/core/meshcop/dataset_local.cpp b/src/core/meshcop/dataset_local.cpp index cad594ffa..07d888d91 100644 --- a/src/core/meshcop/dataset_local.cpp +++ b/src/core/meshcop/dataset_local.cpp @@ -196,6 +196,7 @@ otError DatasetLocal::Get(otOperationalDataset &aDataset) const { const NetworkNameTlv *tlv = static_cast(cur); memcpy(aDataset.mNetworkName.m8, tlv->GetNetworkName(), tlv->GetLength()); + aDataset.mNetworkName.m8[tlv->GetLength()] = '\0'; aDataset.mIsNetworkNameSet = true; break; } diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 34459ff2c..501284197 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -151,8 +151,8 @@ otError DatasetManager::ApplyConfiguration(void) { const NetworkNameTlv *name = static_cast(cur); otNetworkName networkName; - memset(networkName.m8, 0, sizeof(networkName)); memcpy(networkName.m8, name->GetNetworkName(), name->GetLength()); + networkName.m8[name->GetLength()] = '\0'; netif.GetMac().SetNetworkName(networkName.m8); break; } diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index 74eeef803..58efebd32 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -435,7 +435,13 @@ void Joiner::HandleJoinerEntrust(Coap::Header &aHeader, Message &aMessage, const netif.GetKeyManager().SetCurrentKeySequence(networkKeySeq.GetNetworkKeySequence()); netif.GetMle().SetMeshLocalPrefix(meshLocalPrefix.GetMeshLocalPrefix()); netif.GetMac().SetExtendedPanId(extendedPanId.GetExtendedPanId()); - netif.GetMac().SetNetworkName(networkName.GetNetworkName()); + + { + otNetworkName name; + memcpy(name.m8, networkName.GetNetworkName(), networkName.GetLength()); + name.m8[networkName.GetLength()] = '\0'; + netif.GetMac().SetNetworkName(name.m8); + } otLogInfoMeshCoP(GetInstance(), "join success!"); diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 12d50e405..afabaa76f 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -3098,6 +3098,7 @@ otError Mle::HandleDiscoveryResponse(const Message &aMessage, const Ip6::Message aMessage.Read(offset, sizeof(networkName), &networkName); VerifyOrExit(networkName.IsValid(), error = OT_ERROR_PARSE); memcpy(&result.mNetworkName, networkName.GetNetworkName(), networkName.GetLength()); + result.mNetworkName.m8[networkName.GetLength()] = '\0'; break; case MeshCoP::Tlv::kSteeringData: