mirror of
https://github.com/Metabolix/HackBGRT.git
synced 2026-04-10 04:01:31 -07:00
Check BMP pixel data size when loading
This commit is contained in:
11
src/main.c
11
src/main.c
@@ -247,7 +247,14 @@ static BMP* LoadBMP(EFI_FILE_HANDLE root_dir, const CHAR16* path) {
|
|||||||
UINTN size = 0;
|
UINTN size = 0;
|
||||||
BMP* bmp = LoadFile(root_dir, path, &size);
|
BMP* bmp = LoadFile(root_dir, path, &size);
|
||||||
if (bmp) {
|
if (bmp) {
|
||||||
if (size >= bmp->file_size && CompareMem(bmp, "BM", 2) == 0 && bmp->file_size - bmp->pixel_data_offset > 4 && bmp->width && bmp->height && (bmp->bpp == 32 || bmp->bpp == 24) && bmp->compression == 0) {
|
if (size >= bmp->file_size
|
||||||
|
&& CompareMem(bmp, "BM", 2) == 0
|
||||||
|
&& bmp->file_size > bmp->pixel_data_offset
|
||||||
|
&& bmp->width > 0
|
||||||
|
&& bmp->height > 0
|
||||||
|
&& (bmp->bpp == 32 || bmp->bpp == 24)
|
||||||
|
&& bmp->height * (-(-(bmp->width * (bmp->bpp / 8)) & ~3)) <= bmp->file_size - bmp->pixel_data_offset
|
||||||
|
&& bmp->compression == 0) {
|
||||||
return bmp;
|
return bmp;
|
||||||
}
|
}
|
||||||
FreePool(bmp);
|
FreePool(bmp);
|
||||||
@@ -271,8 +278,6 @@ static void CropBMP(BMP* bmp, int w, int h) {
|
|||||||
bmp->image_size = 0;
|
bmp->image_size = 0;
|
||||||
bmp->width = min(bmp->width, w);
|
bmp->width = min(bmp->width, w);
|
||||||
bmp->height = min(bmp->height, h);
|
bmp->height = min(bmp->height, h);
|
||||||
const int h_max = (bmp->file_size - bmp->pixel_data_offset) / old_pitch;
|
|
||||||
bmp->height = min(bmp->height, h_max);
|
|
||||||
const int new_pitch = -(-(bmp->width * (bmp->bpp / 8)) & ~3);
|
const int new_pitch = -(-(bmp->width * (bmp->bpp / 8)) & ~3);
|
||||||
|
|
||||||
if (new_pitch < old_pitch) {
|
if (new_pitch < old_pitch) {
|
||||||
|
|||||||
Reference in New Issue
Block a user