GraphicsMagick: coders/bmp.c Bitmap header with size 52 bytes is...

GraphicsMagick Commits <[email protected]> Thu, 31 Aug 2023 20:01:05 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.13219.1693530073.1374.graphicsmagick-commit@lists.sourceforge.net>
changeset 84915db66dea in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=84915db66dea
summary: coders/bmp.c Bitmap header with size 52 bytes is also valid.

diffstat:

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

diffs (76 lines):

diff -r 3a8a179f37b7 -r 84915db66dea ChangeLog
--- a/ChangeLog	Thu Aug 31 15:34:33 2023 -0500
+++ b/ChangeLog	Fri Sep 01 03:00:51 2023 +0200
@@ -1,3 +1,7 @@
+2023-09-01  Fojtik Jaroslav  <[email protected]>
+
+	* coders/bmp.c Bitmap header with size 52 bytes is also valid.
+
 2023-08-31  Bob Friesenhahn  <[email protected]>
 
 	* magick/module_aliases.h: Add missing module aliases "PNG00",
diff -r 3a8a179f37b7 -r 84915db66dea coders/bmp.c
--- a/coders/bmp.c	Thu Aug 31 15:34:33 2023 -0500
+++ b/coders/bmp.c	Fri Sep 01 03:00:51 2023 +0200
@@ -775,7 +775,7 @@
       if (bmp_info.offset_bits < bmp_info.size)
         ThrowBMPReaderException(CorruptImageError,ImproperImageHeader,image);
 
-      if (bmp_info.size == 12)
+      if(bmp_info.size == 12)
         {
           /*
             Windows 2.X or OS/2 BMP image file.
@@ -809,16 +809,32 @@
           */
           switch(bmp_info.size)
             {
-            case 40:
-            case 56:
-            case 64:
+            case 40: if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X");
+                     break;
+            case 52: if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X V2");
+                     break;
+            case 56:if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X V3");
+                     break;
+            case 64: if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: OS22XBITMAPHEADER");
+                     break;
             case 78:
-            case 108: break;
+            case 108: if (logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X V4");
+                     break;
+            case 124: if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X V5");
+                     break;
             default: if (bmp_info.size < 64)
                 ThrowBMPReaderException(CorruptImageError, NonOS2HeaderSizeError, image);
               /* A value larger than 64 indicates a later version of the OS/2 BMP format.
                  .... as far as OS/2 development caesed we could consider to
                  close this Trojan's horse window in future. */
+                     if(logging)
+                         (void) LogMagickEvent(CoderEvent, GetMagickModule(), "Format: MS Windows bitmap 3.X ?");
               break;
             }
 
@@ -845,7 +861,6 @@
           if (logging)
             {
               (void) LogMagickEvent(CoderEvent, GetMagickModule(),
-                                    "  Format: MS Windows bitmap 3.X\n"
                                     "    Geometry: %dx%d\n"
                                     "    Planes: %u\n"
                                     "    Bits per pixel: %u",
@@ -885,7 +900,6 @@
 
               if(logging)
                   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-                              "  OS22XBITMAPHEADER header:\n"
                               "    Units: %u\n"
                               "    Reserved: %u\n"
                               "    Recording: %u\n"