]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c
Add more check to make sure the valid pointer be used.
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Dispatcher / Dispatcher.c
index 5f8e383158eb83e6fbb0a115dc723ac1d2095589..16fd793c12a356623d1ce59f73bc3c25f18753a7 100644 (file)
@@ -745,40 +745,42 @@ FvIsBeingProcesssed (
     //\r
     // Get the full FV header based on FVB protocol.\r
     //\r
+    ASSERT (Fvb != NULL);\r
     Status = GetFwVolHeader (Fvb, &FwVolHeader);\r
-    if (EFI_ERROR (Status)) {\r
-      FwVolHeader = NULL;\r
-    } else if (VerifyFvHeaderChecksum (FwVolHeader) && FwVolHeader->ExtHeaderOffset != 0) {\r
-      ExtHeaderOffset = (UINT32) FwVolHeader->ExtHeaderOffset;\r
-      BlockMap  = FwVolHeader->BlockMap;\r
-      LbaIndex  = 0;\r
-      LbaOffset = 0;\r
-      //\r
-      // Find LbaIndex and LbaOffset for FV extension header based on BlockMap.\r
-      //\r
-      while ((BlockMap->NumBlocks != 0) || (BlockMap->Length != 0)) {\r
-        for (Index = 0; Index < BlockMap->NumBlocks && ExtHeaderOffset >= BlockMap->Length; Index ++) {\r
-          ExtHeaderOffset -= BlockMap->Length;\r
-          LbaIndex ++;\r
+    if (!EFI_ERROR (Status)) {\r
+      ASSERT (FwVolHeader != NULL);\r
+      if (VerifyFvHeaderChecksum (FwVolHeader) && FwVolHeader->ExtHeaderOffset != 0) {\r
+        ExtHeaderOffset = (UINT32) FwVolHeader->ExtHeaderOffset;\r
+        BlockMap  = FwVolHeader->BlockMap;\r
+        LbaIndex  = 0;\r
+        LbaOffset = 0;\r
+        //\r
+        // Find LbaIndex and LbaOffset for FV extension header based on BlockMap.\r
+        //\r
+        while ((BlockMap->NumBlocks != 0) || (BlockMap->Length != 0)) {\r
+          for (Index = 0; Index < BlockMap->NumBlocks && ExtHeaderOffset >= BlockMap->Length; Index ++) {\r
+            ExtHeaderOffset -= BlockMap->Length;\r
+            LbaIndex ++;\r
+          }\r
+          //\r
+          // Check whether FvExtHeader is crossing the multi block range.\r
+          //\r
+          if (Index < BlockMap->NumBlocks) {\r
+            LbaOffset = ExtHeaderOffset;\r
+            break;\r
+          }\r
+          BlockMap++;\r
         }\r
         //\r
-        // Check whether FvExtHeader is crossing the multi block range.\r
+        // Read FvNameGuid from FV extension header.\r
         //\r
-        if (Index < BlockMap->NumBlocks) {\r
-          LbaOffset = ExtHeaderOffset;\r
-          break;\r
+        Status = ReadFvbData (Fvb, &LbaIndex, &LbaOffset, sizeof (FvNameGuid), (UINT8 *) &FvNameGuid);\r
+        if (!EFI_ERROR (Status)) {\r
+          FvNameGuidIsFound = TRUE;\r
         }\r
-        BlockMap++;\r
-      }\r
-      //\r
-      // Read FvNameGuid from FV extension header.\r
-      //\r
-      Status = ReadFvbData (Fvb, &LbaIndex, &LbaOffset, sizeof (FvNameGuid), (UINT8 *) &FvNameGuid);\r
-      if (!EFI_ERROR (Status)) {\r
-        FvNameGuidIsFound = TRUE;\r
       }\r
+      CoreFreePool (FwVolHeader);\r
     }\r
-    CoreFreePool (FwVolHeader);\r
   }\r
 \r
   if (FvNameGuidIsFound) {\r