From 80af6b6919ffa01b9124bdcd4012db59c52ecf15 Mon Sep 17 00:00:00 2001 From: cristy Date: Mon, 12 Nov 2012 12:48:16 +0000 Subject: [PATCH] --- MagickCore/magic.c | 1 + coders/pict.c | 23 ++++++++++++++++++++--- config/mime.xml | 1 + 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/MagickCore/magic.c b/MagickCore/magic.c index f21db0f01..eb9a353b1 100644 --- a/MagickCore/magic.c +++ b/MagickCore/magic.c @@ -96,6 +96,7 @@ static const MagicMapInfo { "BMP", 0, MagickString("CI") }, { "BMP", 0, MagickString("CP") }, { "BMP", 0, MagickString("IC") }, + { "PICT", 0, MagickString("PICT") }, { "BMP", 0, MagickString("PI") }, { "CALS", 21, MagickString("version: MIL-STD-1840") }, { "CALS", 0, MagickString("srcdocid:") }, diff --git a/coders/pict.c b/coders/pict.c index a55687ce1..b59b2477f 100644 --- a/coders/pict.c +++ b/coders/pict.c @@ -745,6 +745,13 @@ static size_t EncodeImage(Image *image,const unsigned char *scanline, */ static MagickBooleanType IsPICT(const unsigned char *magick,const size_t length) { + if (length < 12) + return(MagickFalse); + /* + Embedded OLE2 macintosh have "PICT" instead of 512 platform header. + */ + if (memcmp(magick,"PICT",4) == 0) + return(MagickTrue); if (length < 528) return(MagickFalse); if (memcmp(magick+522,"\000\021\002\377\014\000",6) == 0) @@ -793,7 +800,8 @@ static Image *ReadPICTImage(const ImageInfo *image_info, ExceptionInfo *exception) { char - geometry[MaxTextExtent]; + geometry[MaxTextExtent], + header_ole[4]; Image *image; @@ -859,8 +867,17 @@ static Image *ReadPICTImage(const ImageInfo *image_info, */ pixmap.bits_per_pixel=0; pixmap.component_count=0; - for (i=0; i < 512; i++) - (void) ReadBlobByte(image); /* skip header */ + /* + Skip header : 512 for standard PICT and 4, ie "PICT" for OLE2. + */ + header_ole[0]=ReadBlobByte(image); + header_ole[1]=ReadBlobByte(image); + header_ole[2]=ReadBlobByte(image); + header_ole[3]=ReadBlobByte(image); + if (!((header_ole[0] == 0x50) && (header_ole[1] == 0x49) && + (header_ole[2] == 0x43) && (header_ole[3] == 0x54 ))) + for (i=0; i < 508; i++) + (void) ReadBlobByte(image); (void) ReadBlobMSBShort(image); /* skip picture size */ ReadRectangle(image,frame); while ((c=ReadBlobByte(image)) == 0) ; diff --git a/config/mime.xml b/config/mime.xml index 4dd55f293..c1b61f47d 100644 --- a/config/mime.xml +++ b/config/mime.xml @@ -755,6 +755,7 @@ + -- 2.50.1