[Magick-bugs] Patch: fix reading of 24 bit icon files

Hans de Goede j.w.r.degoede at hhs.nl
Tue Apr 1 13:35:10 PDT 2008


Hi All,

Some recent versions of ImageMagick have seen some changes to the .ico handling 
code to support reading 32 bit .ico files which contain a real alpha channel 
instead of an alpha 0/1 bitmask.

These changes have broken support for reading 24 bpp + alpha bitmask .ico 
files, by trying to read an alpha channel there, leading to an early eof.

This patch restores the reading of 24 bit .ico files, by not trying to read an 
alpha channel there, but instead use the alpha bitmask as ImageMagicke did a 
couple of releases ago.

And yes this patch is against a sligthly old version of ImageMagick, but the 
bug is still present in svn trunk.

Regards,

Hans
-------------- next part --------------
diff -up ImageMagick-6.3.8/coders/icon.c~ ImageMagick-6.3.8/coders/icon.c
--- ImageMagick-6.3.8/coders/icon.c~	2008-04-01 17:30:58.000000000 +0200
+++ ImageMagick-6.3.8/coders/icon.c	2008-04-01 17:30:58.000000000 +0200
@@ -501,7 +501,7 @@ static Image *ReadICONImage(const ImageI
             q->blue=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
             q->green=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
             q->red=ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
-            if (image->matte != MagickFalse)
+            if (icon_info.bits_per_pixel == 32)
               q->opacity=(Quantum) QuantumRange-ScaleCharToQuantum(
                 (unsigned char) ReadBlobByte(image));
             q++;
@@ -527,7 +527,7 @@ static Image *ReadICONImage(const ImageI
         ThrowReaderException(CorruptImageError,"ImproperImageHeader");
     }
     (void) SyncImage(image);
-    if (icon_info.bits_per_pixel <= 16)
+    if (icon_info.bits_per_pixel != 32)
       {
         /*
           Read the ICON alpha mask.


More information about the Magick-bugs mailing list