]> granicus.if.org Git - imagemagick/blobdiff - coders/mpc.c
(no commit message)
[imagemagick] / coders / mpc.c
index 310366e2240f1678320cf2b7a0102de97101b193..4046d3e4a750064cef04a57e83dbac762b6b8bfe 100644 (file)
@@ -243,8 +243,11 @@ static Image *ReadMPCImage(const ImageInfo *image_info,ExceptionInfo *exception)
           for (p=comment; comment != (char *) NULL; p++)
           {
             c=ReadBlobByte(image);
-            if ((c == EOF) || (c == (int) '}'))
-              break;
+            if (c == (int) '\\')
+              c=ReadBlobByte(image);
+            else
+              if ((c == EOF) || (c == (int) '}'))
+                break;
             if ((size_t) (p-comment+1) >= length)
               {
                 *p='\0';
@@ -306,6 +309,15 @@ static Image *ReadMPCImage(const ImageInfo *image_info,ExceptionInfo *exception)
                       "MemoryAllocationFailed");
                   *p++=(char) c;
                   c=ReadBlobByte(image);
+                  if (c == '\\')
+                    {
+                      c=ReadBlobByte(image);
+                      if (c == (int) '}')
+                        {
+                          *p++=(char) c;
+                          c=ReadBlobByte(image);
+                        }
+                    }
                   if (*options != '{')
                     if (isspace((int) ((unsigned char) c)) != 0)
                       break;
@@ -1289,11 +1301,19 @@ static MagickBooleanType WriteMPCImage(const ImageInfo *image_info,Image *image,
           for (i=0; i < (ssize_t) strlen(value); i++)
             if (isspace((int) ((unsigned char) value[i])) != 0)
               break;
-          if (i < (ssize_t) strlen(value))
-            (void) WriteBlobByte(image,'{');
-          (void) WriteBlob(image,strlen(value),(unsigned char *) value);
-          if (i < (ssize_t) strlen(value))
-            (void) WriteBlobByte(image,'}');
+          if (i == (ssize_t) strlen(value))
+            (void) WriteBlob(image,strlen(value),(const unsigned char *) value);
+          else
+            {
+              (void) WriteBlobByte(image,'{');
+              for (i=0; i < (ssize_t) strlen(value); i++)
+              {
+                if (value[i] == (int) '}')
+                  (void) WriteBlobByte(image,'\\');
+                (void) WriteBlobByte(image,value[i]);
+              }
+              (void) WriteBlobByte(image,'}');
+            }
         }
       (void) WriteBlobByte(image,'\n');
       property=GetNextImageProperty(image);