UINT8 *AuthData;\r
UINTN AuthDataSize;\r
EFI_IMAGE_DATA_DIRECTORY *SecDataDir;\r
+ UINT32 SecDataDirEnd;\r
+ UINT32 SecDataDirLeft;\r
UINT32 OffSet;\r
CHAR16 *NameStr;\r
RETURN_STATUS PeCoffStatus;\r
// "Attribute Certificate Table".\r
// The first certificate starts at offset (SecDataDir->VirtualAddress) from the start of the file.\r
//\r
+ SecDataDirEnd = SecDataDir->VirtualAddress + SecDataDir->Size;\r
for (OffSet = SecDataDir->VirtualAddress;\r
- OffSet < (SecDataDir->VirtualAddress + SecDataDir->Size);\r
+ OffSet < SecDataDirEnd;\r
OffSet += (WinCertificate->dwLength + ALIGN_SIZE (WinCertificate->dwLength))) {\r
WinCertificate = (WIN_CERTIFICATE *) (mImageBase + OffSet);\r
- if ((SecDataDir->VirtualAddress + SecDataDir->Size - OffSet) <= sizeof (WIN_CERTIFICATE) ||\r
- (SecDataDir->VirtualAddress + SecDataDir->Size - OffSet) < WinCertificate->dwLength) {\r
+ SecDataDirLeft = SecDataDirEnd - OffSet;\r
+ if (SecDataDirLeft <= sizeof (WIN_CERTIFICATE) ||\r
+ SecDataDirLeft < WinCertificate->dwLength) {\r
break;\r
}\r
\r
}\r
}\r
\r
- if (OffSet != (SecDataDir->VirtualAddress + SecDataDir->Size)) {\r
+ if (OffSet != SecDataDirEnd) {\r
//\r
// The Size in Certificate Table or the attribute certificate table is corrupted.\r
//\r