RETURN_STATUS Status;\r
EFI_IMAGE_DOS_HEADER DosHdr;\r
UINTN Size;\r
+ UINTN ReadSize;\r
UINT16 Magic;\r
UINT32 SectionHeaderOffset;\r
UINT32 Index;\r
// Read the DOS image header to check for its existence\r
//\r
Size = sizeof (EFI_IMAGE_DOS_HEADER);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
0,\r
&Size,\r
&DosHdr\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r
// location in both images.\r
//\r
Size = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
ImageContext->PeCoffHeaderOffset,\r
&Size,\r
Hdr.Pe32\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r
}\r
\r
//\r
- // Read Hdr.Pe32.OptionalHeader.SizeOfHeaders data from file\r
+ // 2.2 Read last byte of Hdr.Pe32.OptionalHeader.SizeOfHeaders from the file.\r
//\r
Size = 1;\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
Hdr.Pe32->OptionalHeader.SizeOfHeaders - 1,\r
&Size,\r
&BufferData\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
\r
}\r
\r
//\r
- // Read section header from file\r
+ // Read last byte of section header from file\r
//\r
Size = 1;\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress +\r
&Size,\r
&BufferData\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
}\r
}\r
\r
//\r
- // Read Hdr.Pe32.OptionalHeader.SizeOfHeaders data from file\r
+ // 2.2 Read last byte of Hdr.Pe32Plus.OptionalHeader.SizeOfHeaders from the file.\r
//\r
Size = 1;\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders - 1,\r
&Size,\r
&BufferData\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
\r
}\r
\r
//\r
- // Read section header from file\r
+ // Read last byte of section header from file\r
//\r
Size = 1;\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress +\r
&Size,\r
&BufferData\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
}\r
// Read section header from file\r
//\r
Size = sizeof (EFI_IMAGE_SECTION_HEADER);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
SectionHeaderOffset,\r
&Size,\r
&SectionHeader\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
\r
// Read the last byte to make sure the data is in the image region.\r
//\r
Size = 1;\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
SectionHeader.PointerToRawData + SectionHeader.SizeOfRawData - 1,\r
&Size,\r
&BufferData\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
return Status;\r
}\r
}\r
EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;\r
EFI_IMAGE_DATA_DIRECTORY *DebugDirectoryEntry;\r
UINTN Size;\r
+ UINTN ReadSize;\r
UINTN Index;\r
UINTN DebugDirectoryEntryRva;\r
UINTN DebugDirectoryEntryFileOffset;\r
// Read section header from file\r
//\r
Size = sizeof (EFI_IMAGE_SECTION_HEADER);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
SectionHeaderOffset,\r
&Size,\r
&SectionHeader\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r
// Read next debug directory entry\r
//\r
Size = sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
DebugDirectoryEntryFileOffset + Index,\r
&Size,\r
&DebugEntry\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r
// Read section header from file\r
//\r
Size = sizeof (EFI_IMAGE_SECTION_HEADER);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
SectionHeaderOffset,\r
&Size,\r
&SectionHeader\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r
// Read next debug directory entry\r
//\r
Size = sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY);\r
+ ReadSize = Size;\r
Status = ImageContext->ImageRead (\r
ImageContext->Handle,\r
DebugDirectoryEntryFileOffset + Index,\r
&Size,\r
&DebugEntry\r
);\r
- if (RETURN_ERROR (Status)) {\r
+ if (RETURN_ERROR (Status) || (Size != ReadSize)) {\r
ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
return Status;\r
}\r