GraphicsMagick: coders/bmp.c Display bitmasks into optional log.

GraphicsMagick Commits <[email protected]> Thu, 21 Sep 2023 17:59:09 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.2712.1695337160.1370.graphicsmagick-commit@lists.sourceforge.net>
changeset 7b1e4f7e62b0 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=7b1e4f7e62b0
summary: coders/bmp.c Display bitmasks into optional log.

diffstat:

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

diffs (59 lines):

diff -r d1a689f0b9e9 -r 7b1e4f7e62b0 ChangeLog
--- a/ChangeLog	Thu Sep 21 08:21:06 2023 -0500
+++ b/ChangeLog	Fri Sep 22 00:58:42 2023 +0200
@@ -1,3 +1,7 @@
+2023-09-22  Fojtik Jaroslav  <[email protected]>
+
+	* coders/bmp.c Display bitmasks into optional log.
+
 2023-09-21  Bob Friesenhahn  <[email protected]>
 
 	* PerlMagick/t/jpeg/read.t: Add test for JPEG-compressed BMP.
diff -r d1a689f0b9e9 -r 7b1e4f7e62b0 coders/bmp.c
--- a/coders/bmp.c	Thu Sep 21 08:21:06 2023 -0500
+++ b/coders/bmp.c	Fri Sep 22 00:58:42 2023 +0200
@@ -1125,25 +1125,38 @@
         case BI_BITFIELDS:
           if(bmp_info.size==40)
             {
-              if(bmp_info.ba_offset>0 && bmp_info.ba_offset<52)
-                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);	/* check for gap size >=12*/
+              if(bmp_info.ba_offset==0) bmp_info.ba_offset=52;
+              if(bmp_info.ba_offset<52)		/* check for gap size >=12*/
+                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);
               bmp_info.red_mask=ReadBlobLSBLong(image);
               bmp_info.green_mask=ReadBlobLSBLong(image);
               bmp_info.blue_mask=ReadBlobLSBLong(image);
+              goto CheckBitSize;
             }
-          goto CheckBitSize;
+          goto CheckAlphaBitSize;
         case BI_ALPHABITFIELDS:
           if(bmp_info.size==40)
             {
-              if(bmp_info.ba_offset>0 && bmp_info.ba_offset<56)
-                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);	/* check for gap size >=16*/
+              if(bmp_info.ba_offset==0) bmp_info.ba_offset=56;
+              if(bmp_info.ba_offset<56)		/* check for gap size >=16*/
+                 ThrowBMPReaderException(CorruptImageError,CorruptImage,image);
               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);
             }
+CheckAlphaBitSize:
+            if (image->logging)
+                (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                        "Alpha Mask: 0x%04x",
+                                        bmp_info.alpha_mask);
 CheckBitSize:
+            if (image->logging)
+                (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                        "Red Mask: 0x%04x\n"
+                                        "Green Mask: 0x%04x\n"
+                                        "Blue Mask: 0x%04x",
+                                            bmp_info.red_mask, bmp_info.green_mask, bmp_info.blue_mask);
           if(!(bmp_info.bits_per_pixel==16 || bmp_info.bits_per_pixel==32))
               ThrowBMPReaderException(CorruptImageError,CorruptImage,image);
           break;