fixed overflow issue when reading BMP file.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8084 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
vanjeff 2009-04-15 03:03:28 +00:00
parent cb7d01c0c9
commit 88f2bdb51d
1 changed files with 10 additions and 3 deletions

View File

@ -587,7 +587,7 @@ ConvertBmpToGopBlt (
BMP_COLOR_MAP *BmpColorMap; BMP_COLOR_MAP *BmpColorMap;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer; EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt; EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINTN BltBufferSize; UINT64 BltBufferSize;
UINTN Index; UINTN Index;
UINTN Height; UINTN Height;
UINTN Width; UINTN Width;
@ -623,12 +623,19 @@ ConvertBmpToGopBlt (
// Calculate the BltBuffer needed size. // Calculate the BltBuffer needed size.
// //
BltBufferSize = BmpHeader->PixelWidth * BmpHeader->PixelHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL); BltBufferSize = BmpHeader->PixelWidth * BmpHeader->PixelHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
if (BltBufferSize >= SIZE_4GB) {
//
// If the BMP resolution is too large
//
return EFI_UNSUPPORTED;
}
IsAllocated = FALSE; IsAllocated = FALSE;
if (*GopBlt == NULL) { if (*GopBlt == NULL) {
// //
// GopBlt is not allocated by caller. // GopBlt is not allocated by caller.
// //
*GopBltSize = BltBufferSize; *GopBltSize = (UINTN) BltBufferSize;
*GopBlt = AllocatePool (*GopBltSize); *GopBlt = AllocatePool (*GopBltSize);
IsAllocated = TRUE; IsAllocated = TRUE;
if (*GopBlt == NULL) { if (*GopBlt == NULL) {
@ -639,7 +646,7 @@ ConvertBmpToGopBlt (
// GopBlt has been allocated by caller. // GopBlt has been allocated by caller.
// //
if (*GopBltSize < BltBufferSize) { if (*GopBltSize < BltBufferSize) {
*GopBltSize = BltBufferSize; *GopBltSize = (UINTN) BltBufferSize;
return EFI_BUFFER_TOO_SMALL; return EFI_BUFFER_TOO_SMALL;
} }
} }