From 61dcf6cf58f845a0441af0bc059cab6fff50f933 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Fri, 23 Sep 2016 21:01:28 -0700 Subject: [PATCH] Fix bounds checks in cli. (#682) --- src/cli/cli.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 76743b2ff..2223480b7 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -2066,8 +2066,8 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[]) } else if (strcmp(argv[index], "binary") == 0) { - VerifyOrExit((index + 1) < argc, error = kThreadError_Parse); - value = static_cast(strlen(argv[++index]) + 1) / 2; + VerifyOrExit(++index < argc, error = kThreadError_Parse); + value = static_cast(strlen(argv[index]) + 1) / 2; VerifyOrExit(static_cast(value) <= (sizeof(tlvs) - static_cast(length)), error = kThreadError_NoBufs); VerifyOrExit(Interpreter::Hex2Bin(argv[index], tlvs + length, static_cast(value)) >= 0, error = kThreadError_Parse); @@ -2098,23 +2098,23 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[]) if (strcmp(argv[index], "locator") == 0) { - VerifyOrExit(index < argc, error = kThreadError_Parse); + VerifyOrExit(++index < argc, error = kThreadError_Parse); dataset.mIsLocatorSet = true; - SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value)); + SuccessOrExit(error = Interpreter::ParseLong(argv[index], value)); dataset.mLocator = static_cast(value); } else if (strcmp(argv[index], "sessionid") == 0) { - VerifyOrExit(index < argc, error = kThreadError_Parse); + VerifyOrExit(++index < argc, error = kThreadError_Parse); dataset.mIsSessionIdSet = true; - SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value)); + SuccessOrExit(error = Interpreter::ParseLong(argv[index], value)); dataset.mSessionId = static_cast(value); } else if (strcmp(argv[index], "steeringdata") == 0) { - VerifyOrExit((index + 1) < argc, error = kThreadError_Parse); + VerifyOrExit(++index < argc, error = kThreadError_Parse); dataset.mIsSteeringDataSet = true; - length = static_cast((strlen(argv[++index]) + 1) / 2); + length = static_cast((strlen(argv[index]) + 1) / 2); VerifyOrExit(static_cast(length) <= OT_STEERING_DATA_MAX_LENGTH, error = kThreadError_NoBufs); VerifyOrExit(Interpreter::Hex2Bin(argv[index], dataset.mSteeringData.m8, static_cast(length)) >= 0, error = kThreadError_Parse); @@ -2123,15 +2123,15 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[]) } else if (strcmp(argv[index], "joinerudpport") == 0) { - VerifyOrExit(index < argc, error = kThreadError_Parse); + VerifyOrExit(++index < argc, error = kThreadError_Parse); dataset.mIsJoinerUdpPortSet = true; - SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value)); + SuccessOrExit(error = Interpreter::ParseLong(argv[index], value)); dataset.mJoinerUdpPort = static_cast(value); } else if (strcmp(argv[index], "binary") == 0) { - VerifyOrExit((index + 1) < argc, error = kThreadError_Parse); - length = static_cast((strlen(argv[++index]) + 1) / 2); + VerifyOrExit(++index < argc, error = kThreadError_Parse); + length = static_cast((strlen(argv[index]) + 1) / 2); VerifyOrExit(static_cast(length) <= sizeof(tlvs), error = kThreadError_NoBufs); VerifyOrExit(Interpreter::Hex2Bin(argv[index], tlvs, static_cast(length)) >= 0, error = kThreadError_Parse);