ShellPkg/DP: Add more check for input parameters
New added checkers includes: 1. Too many invalid parameters 2. Too few parameter 3. Invalid number parameter for -n and -t flag 4. Conflict parameter of -A and -R. Cc: Liming Gao <liming.gao@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Jaben Carsey <jaben.carsey@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
@ -775,6 +775,7 @@ RunDp (
|
|||||||
UINTN NameSize;
|
UINTN NameSize;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
TIMER_INFO TimerInfo;
|
TIMER_INFO TimerInfo;
|
||||||
|
UINT64 Intermediate;
|
||||||
|
|
||||||
StringPtr = NULL;
|
StringPtr = NULL;
|
||||||
SummaryMode = FALSE;
|
SummaryMode = FALSE;
|
||||||
@ -799,6 +800,9 @@ RunDp (
|
|||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_ARG), mDpHiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_ARG), mDpHiiHandle);
|
||||||
return SHELL_INVALID_PARAMETER;
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else if (ShellCommandLineGetCount(ParamPackage) > 1){
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_MANY), mDpHiiHandle);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -812,25 +816,81 @@ RunDp (
|
|||||||
mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i");
|
mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i");
|
||||||
CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c");
|
CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c");
|
||||||
|
|
||||||
|
if (AllMode && RawMode) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_CONFLICT_ARG), mDpHiiHandle, L"-A", L"-R");
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
// Options with Values
|
// Options with Values
|
||||||
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");
|
if (ShellCommandLineGetFlag (ParamPackage, L"-n")) {
|
||||||
if (CmdLineArg == NULL) {
|
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");
|
||||||
Number2Display = DEFAULT_DISPLAYCOUNT;
|
if (CmdLineArg == NULL) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
if (!(RawMode || AllMode)) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_NO_RAW_ALL), mDpHiiHandle);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
Status = ShellConvertStringToUint64(CmdLineArg, &Intermediate, FALSE, TRUE);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_NUM_ARG), mDpHiiHandle, L"-n");
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
Number2Display = (UINTN)Intermediate;
|
||||||
|
if (Number2Display == 0 || Number2Display > MAXIMUM_DISPLAYCOUNT) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_RANGE), mDpHiiHandle, L"-n", 0, MAXIMUM_DISPLAYCOUNT);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Number2Display = StrDecimalToUintn(CmdLineArg);
|
Number2Display = DEFAULT_DISPLAYCOUNT;
|
||||||
if (Number2Display == 0) {
|
}
|
||||||
Number2Display = MAXIMUM_DISPLAYCOUNT;
|
|
||||||
|
if (ShellCommandLineGetFlag (ParamPackage, L"-t")) {
|
||||||
|
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-t");
|
||||||
|
if (CmdLineArg == NULL) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
Status = ShellConvertStringToUint64(CmdLineArg, &Intermediate, FALSE, TRUE);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_NUM_ARG), mDpHiiHandle, L"-t");
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
mInterestThreshold = Intermediate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mInterestThreshold = DEFAULT_THRESHOLD; // 1ms := 1,000 us
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ShellCommandLineGetFlag (ParamPackage, L"-c")) {
|
||||||
|
CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c");
|
||||||
|
if (CustomCumulativeToken == NULL) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);
|
||||||
|
return SHELL_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));
|
||||||
|
if (CustomCumulativeData == NULL) {
|
||||||
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
CustomCumulativeData->MinDur = PERF_MAXDUR;
|
||||||
|
CustomCumulativeData->MaxDur = 0;
|
||||||
|
CustomCumulativeData->Count = 0;
|
||||||
|
CustomCumulativeData->Duration = 0;
|
||||||
|
NameSize = StrLen (CustomCumulativeToken) + 1;
|
||||||
|
CustomCumulativeData->Name = AllocateZeroPool (NameSize);
|
||||||
|
if (CustomCumulativeData->Name == NULL) {
|
||||||
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-t");
|
|
||||||
if (CmdLineArg == NULL) {
|
|
||||||
mInterestThreshold = DEFAULT_THRESHOLD; // 1ms := 1,000 us
|
|
||||||
} else {
|
|
||||||
mInterestThreshold = StrDecimalToUint64(CmdLineArg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// DP dump performance data by parsing FPDT table in ACPI table.
|
// DP dump performance data by parsing FPDT table in ACPI table.
|
||||||
// Folloing 3 steps are to get the measurement form the FPDT table.
|
// Folloing 3 steps are to get the measurement form the FPDT table.
|
||||||
@ -873,29 +933,6 @@ RunDp (
|
|||||||
//
|
//
|
||||||
InitSummaryData ();
|
InitSummaryData ();
|
||||||
|
|
||||||
//
|
|
||||||
// Init the custom cumulative data.
|
|
||||||
//
|
|
||||||
CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c");
|
|
||||||
if (CustomCumulativeToken != NULL) {
|
|
||||||
CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));
|
|
||||||
if (CustomCumulativeData == NULL) {
|
|
||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
|
||||||
goto Done;
|
|
||||||
}
|
|
||||||
CustomCumulativeData->MinDur = PERF_MAXDUR;
|
|
||||||
CustomCumulativeData->MaxDur = 0;
|
|
||||||
CustomCumulativeData->Count = 0;
|
|
||||||
CustomCumulativeData->Duration = 0;
|
|
||||||
NameSize = StrLen (CustomCumulativeToken) + 1;
|
|
||||||
CustomCumulativeData->Name = AllocateZeroPool (NameSize);
|
|
||||||
if (CustomCumulativeData->Name == NULL) {
|
|
||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
|
||||||
goto Done;
|
|
||||||
}
|
|
||||||
UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Timer specific processing
|
// Timer specific processing
|
||||||
//
|
//
|
||||||
|
@ -33,6 +33,12 @@
|
|||||||
#string STR_DP_DASHES #language en-US "-------------------------------------------------------------------------------\n"
|
#string STR_DP_DASHES #language en-US "-------------------------------------------------------------------------------\n"
|
||||||
#string STR_DP_SECTION_HEADER #language en-US "\n==[ %s ]========\n"
|
#string STR_DP_SECTION_HEADER #language en-US "\n==[ %s ]========\n"
|
||||||
#string STR_DP_INVALID_ARG #language en-US "Invalid argument(s)\n"
|
#string STR_DP_INVALID_ARG #language en-US "Invalid argument(s)\n"
|
||||||
|
#string STR_DP_TOO_MANY #language en-US "Too many arguments\n"
|
||||||
|
#string STR_DP_TOO_FEW #language en-US "Too few arguments\n"
|
||||||
|
#string STR_DP_INVALID_NUM_ARG #language en-US "Invalid argument(s), the value of %H%s%N must be numbers\n"
|
||||||
|
#string STR_DP_INVALID_RANGE #language en-US "Invalid argument(s), the value of %H%s%N must be between %H%d%N and %H%d%N\n"
|
||||||
|
#string STR_DP_CONFLICT_ARG #language en-US "Invalid argument(s), %H%s%N can not be used together with %H%s%N\n"
|
||||||
|
#string STR_DP_NO_RAW_ALL #language en-US "Invalid argument(s), -n flag must use with -A or -R\n"
|
||||||
#string STR_DP_HANDLES_ERROR #language en-US "Locate all handles error - %r\n"
|
#string STR_DP_HANDLES_ERROR #language en-US "Locate all handles error - %r\n"
|
||||||
#string STR_DP_ERROR_NAME #language en-US "Unknown driver name"
|
#string STR_DP_ERROR_NAME #language en-US "Unknown driver name"
|
||||||
#string STR_PERF_PROPERTY_NOT_FOUND #language en-US "Performance property not found\n"
|
#string STR_PERF_PROPERTY_NOT_FOUND #language en-US "Performance property not found\n"
|
||||||
|
Reference in New Issue
Block a user