]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Mon, 12 Nov 2012 12:48:16 +0000 (12:48 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Mon, 12 Nov 2012 12:48:16 +0000 (12:48 +0000)
MagickCore/magic.c
coders/pict.c
config/mime.xml

index f21db0f01c6a5903acd8ab6a5faa05a34fc4de8e..eb9a353b11b36f09896fc2c29b64ab2d1b62c921 100644 (file)
@@ -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:") },
index a55687ce1a19331b8fd8b7ab4ca36051ac5ff35a..b59b2477fed043d8743817b3906869f05aea532c 100644 (file)
@@ -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) ;
index 4dd55f293e051eca644de468bdd9f85bc28bce30..c1b61f47deb690c0ea27003693c4a28f16543daa 100644 (file)
   <mime type="image/x-pict" description="Macintosh Quickdraw/PICT drawing" priority="100" pattern="*.pict" />
   <mime type="image/x-pict" description="Macintosh Quickdraw/PICT drawing" priority="100" pattern="*.pict1" />
   <mime type="image/x-pict" description="Macintosh Quickdraw/PICT drawing" priority="100" pattern="*.pict2" />
+  <mime type="image/x-pict" description="Macintosh Quickdraw/PICT drawing" data-type="string" offset="0" magic="PICT" priority="50" />
   <mime type="application/x-ufraw" acronym="UFRaw" description="Unidentified Flying Raw" priority="100" pattern="*.ufraw" />
   <mime type="image/x-adobe-dng" acronym="DNG" description="Digital Negative" priority="100" pattern="*.dng" />
   <mime type="image/x-canon-crw" description="Canon RaW" data-type="string" offset="0" magic="II\x1a\x00\x00\x00HEAPCCDR" priority="50" />