Add more check to avoid code enter into wrong state.
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 25 Feb 2010 10:08:54 +0000 (10:08 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 25 Feb 2010 10:08:54 +0000 (10:08 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk@10068 6f19259b-4bc3-4df7-8a09-765794883524

edk2/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.c
edk2/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Package.c
edk2/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/SetupBrowser.c
edk2/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/UefiIfrParser.c
edk2/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.c
edk2/EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/ConvLib.c
edk2/EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/Translate.c

index ec7159b..48f2ff2 100644 (file)
@@ -243,7 +243,7 @@ InitializeHiiDatabase (
   @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
@@ -257,13 +257,13 @@ EFIAPI
 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
index 58dba9d..fb664a2 100644 (file)
@@ -401,8 +401,12 @@ FindStringPackAndUpdatePackListWithOnlyIfrPack (
 \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
@@ -506,6 +510,10 @@ UefiRegisterPackageList (
     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
@@ -860,8 +868,12 @@ RemovePackNotify (
   //\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
index b16d257..3503bc0 100644 (file)
@@ -102,7 +102,7 @@ PlatformBdsShowProgress (
                     (VOID **) &UgaDraw\r
                     );\r
   }\r
-  if (EFI_ERROR (Status)) {\r
+  if (EFI_ERROR (Status) || (GraphicsOutput == NULL && UgaDraw == NULL)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
index 98754ec..faff074 100644 (file)
@@ -556,7 +556,7 @@ ParseOpCodes (
     //\r
     // If scope bit set, push onto scope stack\r
     //\r
-    if (Scope) {\r
+    if (Scope != 0) {\r
       PushScope (Operand);\r
     }\r
 \r
@@ -717,15 +717,17 @@ ParseOpCodes (
     //\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
@@ -735,6 +737,7 @@ ParseOpCodes (
     //\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
@@ -748,11 +751,13 @@ ParseOpCodes (
 \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
@@ -771,6 +776,7 @@ ParseOpCodes (
     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
@@ -820,6 +826,7 @@ ParseOpCodes (
 \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
@@ -837,6 +844,7 @@ ParseOpCodes (
 \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
@@ -846,6 +854,7 @@ ParseOpCodes (
 \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
@@ -864,6 +873,7 @@ ParseOpCodes (
 \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
@@ -881,6 +891,7 @@ ParseOpCodes (
 \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
@@ -889,6 +900,7 @@ ParseOpCodes (
 \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
@@ -999,10 +1011,17 @@ ParseOpCodes (
         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
@@ -1010,6 +1029,7 @@ ParseOpCodes (
     // Refresh\r
     //\r
     case EFI_IFR_REFRESH_OP:\r
+      ASSERT (CurrentStatement != NULL);\r
       CurrentStatement->RefreshInterval = ((EFI_IFR_REFRESH *) OpCodeData)->RefreshInterval;\r
       break;\r
 \r
index 3edb806..d1d5d4d 100644 (file)
@@ -727,8 +727,8 @@ GetIfrBinaryData (
 \r
     Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
   }\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  if (EFI_ERROR (Status) || HiiPackageList == NULL) {\r
+    return EFI_NOT_FOUND;\r
   }\r
 \r
   //\r
index fac1fb7..224f621 100644 (file)
@@ -377,7 +377,7 @@ SmbiosFindHandle (
     }\r
   }\r
 \r
-  if (Link == &mStructureList) {\r
+  if (Link == &mStructureList || StructureNode == NULL) {\r
     return EFI_NOT_FOUND;\r
   } else {\r
     *HandleNum = StructureNode->Structure->Handle;\r
index 3230d96..ad41ec0 100644 (file)
@@ -161,7 +161,7 @@ SmbiosProcessDataRecord (
       }\r
     }\r
 \r
-    if (Link == &mStructureList) {\r
+    if (Link == &mStructureList || StructureNode == NULL) {\r
 \r
       //\r
       // Not found, create a new structure\r