mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
BaseTools: Check the fread function and avoid dead loop
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1789 If the input file is not a valid file, it may cause dead loop, because the return of fread function is not checked. Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com> Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
parent
6b74ccf0f8
commit
ae3c247dbc
@ -751,6 +751,7 @@ Returns:
|
||||
UINTN Signature[2];
|
||||
UINTN BytesRead;
|
||||
UINT32 Size;
|
||||
size_t ReadSize;
|
||||
|
||||
BytesRead = 0;
|
||||
Size = 0;
|
||||
@ -764,7 +765,10 @@ Returns:
|
||||
//
|
||||
// Read the header
|
||||
//
|
||||
fread (&VolumeHeader, sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);
|
||||
ReadSize = fread (&VolumeHeader, sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);
|
||||
if (ReadSize != 1) {
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
BytesRead = sizeof (EFI_FIRMWARE_VOLUME_HEADER) - sizeof (EFI_FV_BLOCK_MAP_ENTRY);
|
||||
Signature[0] = VolumeHeader.Signature;
|
||||
Signature[1] = 0;
|
||||
@ -1053,7 +1057,10 @@ Returns:
|
||||
printf ("Revision: 0x%04X\n", VolumeHeader.Revision);
|
||||
|
||||
do {
|
||||
fread (&BlockMap, sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);
|
||||
ReadSize = fread (&BlockMap, sizeof (EFI_FV_BLOCK_MAP_ENTRY), 1, InputFile);
|
||||
if (ReadSize != 1) {
|
||||
return EFI_ABORTED;
|
||||
}
|
||||
BytesRead += sizeof (EFI_FV_BLOCK_MAP_ENTRY);
|
||||
|
||||
if (BlockMap.NumBlocks != 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user