GraphicsMagick: coders/bmp.c Only 16bpp and 32bpp is supported f...

GraphicsMagick Commits <[email protected]> Wed, 20 Sep 2023 17:05:40 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.2360.1695247948.1961.graphicsmagick-commit@lists.sourceforge.net>
changeset de05af6c7e68 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=de05af6c7e68
summary: coders/bmp.c Only 16bpp and 32bpp is supported for BI_BITFIELDS compression type. 8bpp is not implemented.

diffstat:

 ChangeLog    |   6 +++++-
 coders/bmp.c |  11 ++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

diffs (47 lines):

diff -r 72785f88a361 -r de05af6c7e68 ChangeLog
--- a/ChangeLog	Wed Sep 20 23:06:01 2023 +0200
+++ b/ChangeLog	Thu Sep 21 00:05:16 2023 +0200
@@ -1,4 +1,8 @@
-2023-09-16  Fojtik Jaroslav  <[email protected]>
+2023-09-21  Fojtik Jaroslav  <[email protected]>
+	* coders/bmp.c Only 16bpp and 32bpp is supported for BI_BITFIELDS
+	compression type. 8bpp is not implemented.
+
+2023-09-20  Fojtik Jaroslav  <[email protected]>
 	* coders/bmp.c Remove duplicity, same information has been logged twice.
 	22:54:49 0:0.002746  0.000u 9688 bmp.c/ReadBMPImage/750/Coder:
 	File size: Claimed=8, Actual=1129
diff -r 72785f88a361 -r de05af6c7e68 coders/bmp.c
--- a/coders/bmp.c	Wed Sep 20 23:06:01 2023 +0200
+++ b/coders/bmp.c	Thu Sep 21 00:05:16 2023 +0200
@@ -1125,22 +1125,27 @@
         case BI_BITFIELDS:
           if(bmp_info.size==40)
             {
-                 /* TODO: check for gap size >=12*/
+              if(bmp_info.ba_offset>0 && bmp_info.ba_offset<52)
+                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);	/* check for gap size >=12*/
               bmp_info.red_mask=ReadBlobLSBLong(image);
               bmp_info.green_mask=ReadBlobLSBLong(image);
               bmp_info.blue_mask=ReadBlobLSBLong(image);
             }
-          break;
+          goto CheckBitSize;
         case BI_ALPHABITFIELDS:
           if(bmp_info.size==40)
             {
-                 /* TODO: check for gap size >=12*/
+              if(bmp_info.ba_offset>0 && bmp_info.ba_offset<56)
+                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);	/* check for gap size >=16*/
               bmp_info.red_mask=ReadBlobLSBLong(image);
               bmp_info.green_mask=ReadBlobLSBLong(image);
               bmp_info.blue_mask=ReadBlobLSBLong(image);
                  /* TODO: check for gap size >=16*/
               bmp_info.alpha_mask=ReadBlobLSBLong(image);
             }
+CheckBitSize:
+          if(!(bmp_info.bits_per_pixel==16 || bmp_info.bits_per_pixel==32))
+              ThrowBMPReaderException(CorruptImageError,CorruptImage,image);
           break;
 
         case BI_RGB: