@param This A pointer to the EFI_HII_PROTOCOL instance.\r
@param HandleBufferLength On input, a pointer to the length of the handle buffer. \r
On output, the length of the handle buffer that is required for the handles found.\r
- @param Handle An array of EFI_HII_HANDLE instances returned. \r
+ @param Handle Pointer to an array of EFI_HII_HANDLE instances returned. \r
Type EFI_HII_HANDLE is defined in EFI_HII_PROTOCOL.NewPack() in the Packages section.\r
\r
@retval EFI_SUCCESS Handle was updated successfully.\r
HiiFindHandles (\r
IN EFI_HII_PROTOCOL *This,\r
IN OUT UINT16 *HandleBufferLength,\r
- OUT FRAMEWORK_EFI_HII_HANDLE Handle[1]\r
+ OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
)\r
{\r
- UINT16 Count;\r
- LIST_ENTRY *Link;\r
- HII_THUNK_CONTEXT *ThunkContext;\r
- HII_THUNK_PRIVATE_DATA *Private;\r
+ UINT16 Count;\r
+ LIST_ENTRY *Link;\r
+ HII_THUNK_CONTEXT *ThunkContext;\r
+ HII_THUNK_PRIVATE_DATA *Private;\r
\r
if (HandleBufferLength == NULL) {\r
return EFI_INVALID_PARAMETER;\r
\r
if (ThunkContext != IfrThunkContext) {\r
if (CompareGuid (&IfrThunkContext->TagGuid, &ThunkContext->TagGuid) && (ThunkContext->IfrPackageCount == 0)) {\r
+ StringPackageListHeader = NULL;\r
Status = ExportPackageLists (ThunkContext->UefiHiiHandle, &StringPackageListHeader, &Size);\r
ASSERT_EFI_ERROR (Status);\r
+ if (StringPackageListHeader == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
IfrThunkContext->StringPackageCount = GetPackageCountByType (StringPackageListHeader, EFI_HII_PACKAGE_STRINGS);\r
//\r
ASSERT ((StringPackageCount >=1 && IfrPackageCount == 1) || (FontPackageCount > 0));\r
if (IfrPackageCount > 0) {\r
IfrPackage = GetIfrPackage (Packages);\r
+ if (IfrPackage == NULL) {\r
+ Status = EFI_NOT_FOUND;\r
+ goto Done;\r
+ }\r
GetFormSetGuid (IfrPackage, &ThunkContext->TagGuid);\r
} else {\r
ASSERT (FontPackageCount > 0);\r
//\r
if (ThunkContext != NULL) {\r
if (!ThunkContext->ByFrameworkHiiNewPack) {\r
+ HiiPackageList = NULL;\r
Status = ExportPackageLists (Handle, &HiiPackageList, &BufferSize);\r
ASSERT_EFI_ERROR (Status);\r
+ if (HiiPackageList == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
if (GetPackageCountByType (HiiPackageList, EFI_HII_PACKAGE_STRINGS) == 1) {\r
//\r
//\r
// If scope bit set, push onto scope stack\r
//\r
- if (Scope) {\r
+ if (Scope != 0) {\r
PushScope (Operand);\r
}\r
\r
//\r
case EFI_IFR_SUBTITLE_OP:\r
CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
CurrentStatement->Flags = ((EFI_IFR_SUBTITLE *) OpCodeData)->Flags;\r
\r
- if (Scope) {\r
+ if (Scope != 0) {\r
mInScopeSubtitle = TRUE;\r
}\r
break;\r
\r
case EFI_IFR_TEXT_OP:\r
CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CopyMem (&CurrentStatement->TextTwo, &((EFI_IFR_TEXT *) OpCodeData)->TextTwo, sizeof (EFI_STRING_ID));\r
break;\r
//\r
case EFI_IFR_ACTION_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
if (OpCodeLength == sizeof (EFI_IFR_ACTION_1)) {\r
//\r
\r
case EFI_IFR_RESET_BUTTON_OP:\r
CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));\r
break;\r
\r
case EFI_IFR_REF_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CopyMem (&CurrentStatement->RefFormId, &((EFI_IFR_REF *) OpCodeData)->FormId, sizeof (EFI_FORM_ID));\r
if (OpCodeLength >= sizeof (EFI_IFR_REF2)) {\r
case EFI_IFR_ONE_OF_OP:\r
case EFI_IFR_NUMERIC_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CurrentStatement->Flags = ((EFI_IFR_ONE_OF *) OpCodeData)->Flags;\r
Value = &CurrentStatement->HiiValue;\r
\r
case EFI_IFR_ORDERED_LIST_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CurrentStatement->Flags = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->Flags;\r
CurrentStatement->MaxContainers = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->MaxContainers;\r
\r
case EFI_IFR_CHECKBOX_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CurrentStatement->Flags = ((EFI_IFR_CHECKBOX *) OpCodeData)->Flags;\r
CurrentStatement->StorageWidth = sizeof (BOOLEAN);\r
\r
case EFI_IFR_STRING_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
//\r
// MinSize is the minimum number of characters that can be accepted for this opcode,\r
\r
case EFI_IFR_PASSWORD_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
//\r
// MinSize is the minimum number of characters that can be accepted for this opcode,\r
\r
case EFI_IFR_DATE_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CurrentStatement->Flags = ((EFI_IFR_DATE *) OpCodeData)->Flags;\r
CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_DATE;\r
\r
case EFI_IFR_TIME_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
+ ASSERT (CurrentStatement != NULL);\r
\r
CurrentStatement->Flags = ((EFI_IFR_TIME *) OpCodeData)->Flags;\r
CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_TIME;\r
break;\r
\r
default:\r
+ //\r
+ // Make sure CurrentStatement is not NULL.\r
+ // If it is NULL, 1) ParseOpCodes functions may parse the IFR wrongly. Or 2) the IFR\r
+ // file is wrongly generated by tools such as VFR Compiler.\r
+ //\r
+ ASSERT (CurrentStatement != NULL);\r
ImageId = &CurrentStatement->ImageId;\r
break;\r
}\r
-\r
+ \r
+ ASSERT (ImageId != NULL);\r
CopyMem (ImageId, &((EFI_IFR_IMAGE *) OpCodeData)->Id, sizeof (EFI_IMAGE_ID));\r
break;\r
\r
// Refresh\r
//\r
case EFI_IFR_REFRESH_OP:\r
+ ASSERT (CurrentStatement != NULL);\r
CurrentStatement->RefreshInterval = ((EFI_IFR_REFRESH *) OpCodeData)->RefreshInterval;\r
break;\r
\r