]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VolInfo/VolInfo.c
BaseTools: Check the fread function and avoid dead loop
[mirror_edk2.git] / BaseTools / Source / C / VolInfo / VolInfo.c
index d8216c61e88bd0235721b4a9cea3a4dcb4cddbe8..ffe0b47f03e76ac84ea9be4b65e312a7147ce55a 100644 (file)
@@ -751,6 +751,7 @@ Returns:
   UINTN                       Signature[2];\r
   UINTN                       BytesRead;\r
   UINT32                      Size;\r
+  size_t                      ReadSize;\r
 \r
   BytesRead = 0;\r
   Size      = 0;\r
@@ -764,7 +765,10 @@ Returns:
   //\r
   // Read the header\r
   //\r
-  fread (&VolumeHeader, sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);\r
+  ReadSize = fread (&VolumeHeader, sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);\r
+  if (ReadSize != 1) {\r
+    return EFI_ABORTED;\r
+  }\r
   BytesRead     = sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY);\r
   Signature[0]  = VolumeHeader.Signature;\r
   Signature[1]  = 0;\r
@@ -1053,7 +1057,10 @@ Returns:
   printf ("Revision:              0x%04X\n", VolumeHeader.Revision);\r
 \r
   do {\r
-    fread (&BlockMap, sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);\r
+    ReadSize = fread (&BlockMap, sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);\r
+    if (ReadSize != 1) {\r
+      return EFI_ABORTED;\r
+    }\r
     BytesRead += sizeof (EFI_FV_BLOCK_MAP_ENTRY);\r
 \r
     if (BlockMap.NumBlocks != 0) {\r