]> granicus.if.org Git - imagemagick/commitdiff
Only read the version once.
authorDirk Lemstra <dirk@lemstra.org>
Thu, 18 Jul 2019 20:43:47 +0000 (22:43 +0200)
committerDirk Lemstra <dirk@lemstra.org>
Thu, 18 Jul 2019 20:43:47 +0000 (22:43 +0200)
coders/ps.c

index 8fbf1b20ba14aeaf9570c1e122fe018adf4b16f2..1b937aaf722582e16bd26a6b6bfe18d1c45148b2 100644 (file)
@@ -221,8 +221,8 @@ static void ReadPSInfo(const ImageInfo *image_info,Image *image,
 #define ICCProfile "BeginICCProfile:"
 #define PhotoshopProfile  "BeginPhotoshop:"
 
-  MagickByteBuffer
-    buffer;
+  char
+    version[128];
 
   int
     c;
@@ -230,6 +230,9 @@ static void ReadPSInfo(const ImageInfo *image_info,Image *image,
   MagickBooleanType
     skip;
 
+  MagickByteBuffer
+    buffer;
+
   register char
     *p;
 
@@ -285,6 +288,7 @@ static void ReadPSInfo(const ImageInfo *image_info,Image *image,
   hex_digits[(int) 'F']=15;
   extent=0;
   priority=0;
+  *version='\0';
   spotcolor=0;
   skip=MagickFalse;
   (void) memset(&buffer,0,sizeof(buffer));
@@ -314,10 +318,17 @@ static void ReadPSInfo(const ImageInfo *image_info,Image *image,
       skip=MagickFalse;
     if (skip != MagickFalse)
       continue;
-    if (CompareMagickByteBuffer(&buffer,PostscriptLevel,strlen(PostscriptLevel)) != MagickFalse)
+    if ((*version == '\0') &&
+        (CompareMagickByteBuffer(&buffer,PostscriptLevel,strlen(PostscriptLevel)) != MagickFalse))
       {
-        p=GetMagickByteBufferDatum(&buffer)+4;
-        (void) SetImageProperty(image,"ps:Level",p,exception);
+        i=0;
+        for (c=ReadMagickByteBuffer(&buffer); c != EOF; c=ReadMagickByteBuffer(&buffer))
+        {
+          if ((c == '\r') || (c == '\n') || ((i+1) == sizeof(version)))
+            break;
+          version[i++]=(char) c;
+        }
+        version[i]='\0';
       }
     if (CompareMagickByteBuffer(&buffer,ImageData,strlen(ImageData)) != MagickFalse)
       {
@@ -475,6 +486,8 @@ static void ReadPSInfo(const ImageInfo *image_info,Image *image,
     ps_info->bounds=bounds;
     priority=i;
   }
+  if (version[0] != '\0')
+    (void) SetImageProperty(image,"ps:Level",version,exception);
 }
 
 static inline void CleanupPSInfo(PSInfo *pdf_info)