diff options
Diffstat (limited to 'ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c')
-rw-r--r-- | ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c index a1a0904..0d3f901 100644 --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/OpenInfo.c @@ -25,6 +25,7 @@ STATIC CONST CHAR16 StringUnknown[] = L"Unknown "; @retval EFI_SUCCESS The operation was successful.
@retval EFI_INVALID_PARAMETER TheHandle was NULL.
+ @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
**/
EFI_STATUS
TraverseHandleDatabase (
@@ -102,10 +103,16 @@ TraverseHandleDatabase ( break;
}
- HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle);
+ HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle);
+ if (HandleIndex == 0) {
+ FreePool (OpenInfo);
+ FreePool (ProtocolGuidArray);
+ return EFI_OUT_OF_RESOURCES;
+ }
+
Name = GetStringNameFromHandle (OpenInfo[OpenInfoIndex].AgentHandle, NULL);
ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle);
- if (ControllerIndex != 0) {
+ if ((ControllerIndex != 0) && (Name != NULL)) {
ShellPrintHiiEx (
-1,
-1,
@@ -128,7 +135,7 @@ TraverseHandleDatabase ( HandleIndex,
OpenInfo[OpenInfoIndex].OpenCount,
OpenTypeString,
- Name
+ Name ? Name : L""
);
}
}
@@ -199,13 +206,21 @@ ShellCommandRunOpenInfo ( ShellStatus = SHELL_INVALID_PARAMETER;
} else {
Param1 = ShellCommandLineGetRawValue (Package, 1);
- Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
+ if (Param1 != NULL) {
+ Status = ShellConvertStringToUint64 (Param1, &Intermediate, TRUE, FALSE);
+ }
+
if (EFI_ERROR (Status) || (Param1 == NULL) || (ConvertHandleIndexToHandle ((UINTN)Intermediate) == NULL)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
ShellStatus = SHELL_INVALID_PARAMETER;
} else {
TheHandle = ConvertHandleIndexToHandle ((UINTN)Intermediate);
- ASSERT (TheHandle != NULL);
+ if (TheHandle == NULL) {
+ ASSERT (TheHandle != NULL);
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"openinfo", Param1);
+ return SHELL_INVALID_PARAMETER;
+ }
+
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, (UINTN)Intermediate, TheHandle);
Status = TraverseHandleDatabase (TheHandle);
|