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");
}
}