Fixed bug 2219 - BMP loader do not handle big BITMAPINFOHEADER structure
authorSam Lantinga <slouken@libsdl.org>
Thu, 07 Nov 2013 19:15:58 -0800
changeset 7913 44dc7926f62d
parent 7912 10eff60470b3
child 7914 a391318fa60f
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.
src/video/SDL_bmp.c
--- a/src/video/SDL_bmp.c	Wed Nov 06 23:59:24 2013 -0800
+++ b/src/video/SDL_bmp.c	Thu Nov 07 19:15:58 2013 -0800
@@ -150,6 +150,8 @@
         biBitCount = SDL_ReadLE16(src);
         biCompression = BI_RGB;
     } else {
+        const int headerSize = 40;
+
         biWidth = SDL_ReadLE32(src);
         biHeight = SDL_ReadLE32(src);
         /* biPlanes = */ SDL_ReadLE16(src);
@@ -160,6 +162,10 @@
         /* biYPelsPerMeter = */ SDL_ReadLE32(src);
         biClrUsed = SDL_ReadLE32(src);
         /* biClrImportant = */ SDL_ReadLE32(src);
+
+        if (biSize > headerSize) {
+            SDL_RWseek(src, (biSize - headerSize), RW_SEEK_CUR);
+        }
     }
     if (biHeight < 0) {
         topDown = SDL_TRUE;