mirror of https://github.com/acidanthera/audk.git
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:
parent
3408526e86
commit
728f8950d6
|
@ -775,6 +775,7 @@ RunDp (
|
|||
UINTN NameSize;
|
||||
SHELL_STATUS ShellStatus;
|
||||
TIMER_INFO TimerInfo;
|
||||
UINT64 Intermediate;
|
||||
|
||||
StringPtr = NULL;
|
||||
SummaryMode = FALSE;
|
||||
|
@ -799,6 +800,9 @@ RunDp (
|
|||
if (EFI_ERROR(Status)) {
|
||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_ARG), mDpHiiHandle);
|
||||
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");
|
||||
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
|
||||
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");
|
||||
if (CmdLineArg == NULL) {
|
||||
Number2Display = DEFAULT_DISPLAYCOUNT;
|
||||
if (ShellCommandLineGetFlag (ParamPackage, L"-n")) {
|
||||
CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");
|
||||
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 {
|
||||
Number2Display = StrDecimalToUintn(CmdLineArg);
|
||||
if (Number2Display == 0) {
|
||||
Number2Display = MAXIMUM_DISPLAYCOUNT;
|
||||
Number2Display = DEFAULT_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.
|
||||
// Folloing 3 steps are to get the measurement form the FPDT table.
|
||||
|
@ -873,29 +933,6 @@ RunDp (
|
|||
//
|
||||
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
|
||||
//
|
||||
|
|
|
@ -33,6 +33,12 @@
|
|||
#string STR_DP_DASHES #language en-US "-------------------------------------------------------------------------------\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_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_ERROR_NAME #language en-US "Unknown driver name"
|
||||
#string STR_PERF_PROPERTY_NOT_FOUND #language en-US "Performance property not found\n"
|
||||
|
|
Loading…
Reference in New Issue