Fixed bug 2219 - BMP loader do not handle big BITMAPINFOHEADER structure

Patrice Mandin

I encountered a problem trying to load a 8-bit paletted BMP file using SDL. This file was generated using GIMP 2.8. It has a big BITMAPINFOHEADER (0x6c bytes for biSize field), and thus the palette is incorrectly setup.
main
Sam Lantinga 2013-11-07 19:15:58 -08:00
parent 48e44f7fcb
commit 95c67ed9a7
1 changed files with 6 additions and 0 deletions

View File

@ -150,6 +150,8 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc)
biBitCount = SDL_ReadLE16(src); biBitCount = SDL_ReadLE16(src);
biCompression = BI_RGB; biCompression = BI_RGB;
} else { } else {
const int headerSize = 40;
biWidth = SDL_ReadLE32(src); biWidth = SDL_ReadLE32(src);
biHeight = SDL_ReadLE32(src); biHeight = SDL_ReadLE32(src);
/* biPlanes = */ SDL_ReadLE16(src); /* biPlanes = */ SDL_ReadLE16(src);
@ -160,6 +162,10 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc)
/* biYPelsPerMeter = */ SDL_ReadLE32(src); /* biYPelsPerMeter = */ SDL_ReadLE32(src);
biClrUsed = SDL_ReadLE32(src); biClrUsed = SDL_ReadLE32(src);
/* biClrImportant = */ SDL_ReadLE32(src); /* biClrImportant = */ SDL_ReadLE32(src);
if (biSize > headerSize) {
SDL_RWseek(src, (biSize - headerSize), RW_SEEK_CUR);
}
} }
if (biHeight < 0) { if (biHeight < 0) {
topDown = SDL_TRUE; topDown = SDL_TRUE;