]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/1738
authorCristy <urban-warrior@imagemagick.org>
Fri, 11 Oct 2019 23:28:02 +0000 (19:28 -0400)
committerCristy <urban-warrior@imagemagick.org>
Fri, 11 Oct 2019 23:28:02 +0000 (19:28 -0400)
MagickCore/draw.c
MagickCore/draw.h

index 2e9418bebae01971edda4f3532b867e81260e37b..8ff77fc490355a64ffba3af85bbf16780e76b3c0 100644 (file)
@@ -280,6 +280,8 @@ MagickExport DrawInfo *CloneDrawInfo(const ImageInfo *image_info,
   if (draw_info == (DrawInfo *) NULL)
     return(clone_info);
   exception=AcquireExceptionInfo();
+  if (draw_info->id != (char *) NULL)
+    (void) CloneString(&clone_info->id,draw_info->id);
   if (draw_info->primitive != (char *) NULL)
     (void) CloneString(&clone_info->primitive,draw_info->primitive);
   if (draw_info->geometry != (char *) NULL)
@@ -883,6 +885,8 @@ MagickExport DrawInfo *DestroyDrawInfo(DrawInfo *draw_info)
   if (draw_info->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
   assert(draw_info->signature == MagickCoreSignature);
+  if (draw_info->id != (char *) NULL)
+    draw_info->id=DestroyString(draw_info->id);
   if (draw_info->primitive != (char *) NULL)
     draw_info->primitive=DestroyString(draw_info->primitive);
   if (draw_info->text != (char *) NULL)
@@ -2680,6 +2684,8 @@ static MagickBooleanType RenderMVGContent(Image *image,
                 status=MagickFalse;
                 break;
               }
+            if (LocaleCompare(token,graphic_context[n]->id) == 0)
+              break;
             mvg_class=(const char *) GetValueFromSplayTree(macros,token);
             if (mvg_class != (const char *) NULL)
               {
@@ -3377,7 +3383,10 @@ static MagickBooleanType RenderMVGContent(Image *image,
                 graphic_context[n]=CloneDrawInfo((ImageInfo *) NULL,
                   graphic_context[n-1]);
                 if (*q == '"')
-                  (void) GetNextToken(q,&q,extent,token);
+                  {
+                    (void) GetNextToken(q,&q,extent,token);
+                    (void) CloneString(&graphic_context[n]->id,token);
+                  }
                 break;
               }
             if (LocaleCompare("mask",token) == 0)
index 8b942b32394e16b9a638e34b58a5e11e1501560f..5b34eaaa770bf83fabd16de1311779909fb6e8a6 100644 (file)
@@ -337,6 +337,9 @@ typedef struct _DrawInfo
 
   Image
     *composite_mask;
+
+  char
+    *id;
 } DrawInfo;
 
 typedef struct _PrimitiveInfo