You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-commits@xmlgraphics.apache.org by ss...@apache.org on 2022/01/07 14:04:43 UTC

svn commit: r1896806 [1/3] - in /xmlgraphics/batik/trunk: batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java samples/manyuse.svg

Author: ssteiner
Date: Fri Jan  7 14:04:43 2022
New Revision: 1896806

URL: http://svn.apache.org/viewvc?rev=1896806&view=rev
Log:
BATIK-1319: Prevent the use element from being called more than once

Added:
    xmlgraphics/batik/trunk/samples/manyuse.svg   (with props)
Modified:
    xmlgraphics/batik/trunk/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java
    xmlgraphics/batik/trunk/batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java

Modified: xmlgraphics/batik/trunk/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java?rev=1896806&r1=1896805&r2=1896806&view=diff
==============================================================================
--- xmlgraphics/batik/trunk/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java (original)
+++ xmlgraphics/batik/trunk/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java Fri Jan  7 14:04:43 2022
@@ -22,6 +22,8 @@ import java.awt.Cursor;
 import java.awt.RenderingHints;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.batik.anim.dom.AbstractSVGAnimatedLength;
 import org.apache.batik.anim.dom.AnimatedLiveAttributeValue;
@@ -52,6 +54,8 @@ import org.w3c.dom.svg.SVGUseElement;
  */
 public class SVGUseElementBridge extends AbstractGraphicsNodeBridge {
 
+    private List<String> visited = new ArrayList<>();
+
     /**
      * Used to handle mutation of the referenced content. This is
      * only used in dynamic context and only for reference to local
@@ -116,6 +120,11 @@ public class SVGUseElementBridge extends
         // get the referenced element
         SVGOMUseElement ue = (SVGOMUseElement) e;
         String uri = ue.getHref().getAnimVal();
+        String id = uri + ";" + ue.getStyle().getCssText();
+        if (visited.contains(id)) {
+            return null;
+        }
+        visited.add(id);
         if (uri.length() == 0) {
             throw new BridgeException(ctx, e, ERR_ATTRIBUTE_MISSING,
                                       new Object[] {"xlink:href"});

Modified: xmlgraphics/batik/trunk/batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java?rev=1896806&r1=1896805&r2=1896806&view=diff
==============================================================================
--- xmlgraphics/batik/trunk/batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java (original)
+++ xmlgraphics/batik/trunk/batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java Fri Jan  7 14:04:43 2022
@@ -415,6 +415,11 @@ public class SVGConverterTest extends De
         addTest(t);
         t.setId("OutputTest.reference");
 
+        t = new ConverterOutputTest("samples/manyuse.svg",  // File to convert
+                "test-reports/manyuse.png", // Output
+                "test-references/samples/manyuse.png"); // reference
+        addTest(t);
+        t.setId("manyuse");
     }
 }