33 lines
1020 B
Diff
33 lines
1020 B
Diff
--- a/src/video/SDL_bmp.c 2012-01-19 14:30:06.000000000 +0800
|
|
+++ b/src/video/SDL_bmp.c 2019-04-22 11:29:33.990000000 +0800
|
|
@@ -296,6 +296,12 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops
|
|
}
|
|
*(bits+i) = (pixel>>shift);
|
|
pixel <<= ExpandBMP;
|
|
+ if ( bits[i] >= biClrUsed ) {
|
|
+ SDL_SetError(
|
|
+ "A BMP image contains a pixel with a color out of the palette");
|
|
+ was_error = SDL_TRUE;
|
|
+ goto done;
|
|
+ }
|
|
} }
|
|
break;
|
|
|
|
@@ -306,6 +312,16 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops
|
|
was_error = SDL_TRUE;
|
|
goto done;
|
|
}
|
|
+ if ( 8 == biBitCount && palette && biClrUsed < (1 << biBitCount ) ) {
|
|
+ for ( i=0; i<surface->w; ++i ) {
|
|
+ if ( bits[i] >= biClrUsed ) {
|
|
+ SDL_SetError(
|
|
+ "A BMP image contains a pixel with a color out of the palette");
|
|
+ was_error = SDL_TRUE;
|
|
+ goto done;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
/* Byte-swap the pixels if needed. Note that the 24bpp
|
|
case has already been taken care of above. */
|