mirror of
https://github.com/espressif/openthread.git
synced 2026-07-27 06:17:47 +00:00
[string] add UTF-8 validation (#5810)
This commit is contained in:
+27
-9
@@ -40,6 +40,7 @@
|
||||
#include <openthread/dataset_ftd.h>
|
||||
|
||||
#include "cli/cli.hpp"
|
||||
#include "common/string.hpp"
|
||||
#include "utils/parse_cmdline.hpp"
|
||||
|
||||
using ot::Utils::CmdLineParser::ParseAsHexString;
|
||||
@@ -485,6 +486,7 @@ otError Dataset::ProcessNetworkName(uint8_t aArgsLength, char *aArgs[])
|
||||
size_t length;
|
||||
|
||||
VerifyOrExit((length = strlen(aArgs[0])) <= OT_NETWORK_NAME_MAX_SIZE, error = OT_ERROR_INVALID_ARGS);
|
||||
VerifyOrExit(IsValidUtf8String(aArgs[0]), error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&sDataset.mNetworkName, 0, sizeof(sDataset.mNetworkName));
|
||||
memcpy(sDataset.mNetworkName.m8, aArgs[0], length);
|
||||
@@ -865,29 +867,45 @@ exit:
|
||||
|
||||
otError Dataset::ProcessSet(uint8_t aArgsLength, char *aArgs[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
otOperationalDatasetTlvs dataset;
|
||||
uint16_t tlvsLength;
|
||||
otError error = OT_ERROR_NONE;
|
||||
MeshCoP::Dataset::Type datasetType;
|
||||
|
||||
VerifyOrExit(aArgsLength == 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
tlvsLength = sizeof(dataset.mTlvs);
|
||||
SuccessOrExit(error = ParseAsHexString(aArgs[1], tlvsLength, dataset.mTlvs));
|
||||
dataset.mLength = static_cast<uint8_t>(tlvsLength);
|
||||
|
||||
if (strcmp(aArgs[0], "active") == 0)
|
||||
{
|
||||
SuccessOrExit(error = otDatasetSetActiveTlvs(mInterpreter.mInstance, &dataset));
|
||||
datasetType = MeshCoP::Dataset::Type::kActive;
|
||||
}
|
||||
else if (strcmp(aArgs[0], "pending") == 0)
|
||||
{
|
||||
SuccessOrExit(error = otDatasetSetPendingTlvs(mInterpreter.mInstance, &dataset));
|
||||
datasetType = MeshCoP::Dataset::Type::kPending;
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
{
|
||||
MeshCoP::Dataset dataset(datasetType);
|
||||
MeshCoP::Dataset::Info datasetInfo;
|
||||
uint16_t tlvsLength = MeshCoP::Dataset::kMaxSize;
|
||||
|
||||
SuccessOrExit(error = ParseAsHexString(aArgs[1], tlvsLength, dataset.GetBytes()));
|
||||
dataset.SetSize(tlvsLength);
|
||||
VerifyOrExit(dataset.IsValid(), error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.ConvertTo(datasetInfo);
|
||||
|
||||
switch (datasetType)
|
||||
{
|
||||
case MeshCoP::Dataset::Type::kActive:
|
||||
SuccessOrExit(error = otDatasetSetActive(mInterpreter.mInstance, &datasetInfo));
|
||||
break;
|
||||
case MeshCoP::Dataset::Type::kPending:
|
||||
SuccessOrExit(error = otDatasetSetPending(mInterpreter.mInstance, &datasetInfo));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user