Skip to content

Commit 315b4ca

Browse files
committed
redo BATIK-1319
1 parent d94bc5f commit 315b4ca

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

batik-bridge/src/main/java/org/apache/batik/bridge/BridgeContext.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,28 @@ public class BridgeContext implements ErrorConstants, CSSContext {
270270
*/
271271
protected float animationLimitingAmount;
272272

273+
protected int useElementBridgeCalculationLimit = DEFAULT_USE_ELEMENT_CALCULATION_BRIDGE_LIMIT;
274+
275+
public static final int DEFAULT_USE_ELEMENT_CALCULATION_BRIDGE_LIMIT = 1024;
276+
277+
public int getUseElementBridgeCalculationLimit() {
278+
return useElementBridgeCalculationLimit;
279+
}
280+
281+
public void setUseElementBridgeCalculationLimit(int useElementBridgeCalculationLimit) {
282+
this.useElementBridgeCalculationLimit = useElementBridgeCalculationLimit;
283+
}
284+
285+
public boolean stopAfterConsumeUseElementBridgeCalculationLimit() {
286+
int useElementBridgeCalculationLimit = this.getUseElementBridgeCalculationLimit();
287+
if (useElementBridgeCalculationLimit <= 0) {
288+
return true;
289+
}
290+
--useElementBridgeCalculationLimit;
291+
this.setUseElementBridgeCalculationLimit(useElementBridgeCalculationLimit);
292+
return false;
293+
}
294+
273295
/**
274296
* By default we share a unique instance of InterpreterPool.
275297
*/

batik-bridge/src/main/java/org/apache/batik/bridge/SVGUseElementBridge.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) {
113113
*/
114114
public CompositeGraphicsNode buildCompositeGraphicsNode
115115
(BridgeContext ctx, Element e, CompositeGraphicsNode gn) {
116+
117+
if (ctx.stopAfterConsumeUseElementBridgeCalculationLimit()) {
118+
return null;
119+
}
120+
116121
// get the referenced element
117122
SVGOMUseElement ue = (SVGOMUseElement) e;
118123
String uri = ue.getHref().getAnimVal();
@@ -159,6 +164,9 @@ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) {
159164
for (Node n = localRefElement.getFirstChild();
160165
n != null;
161166
n = localRefElement.getFirstChild()) {
167+
if (ctx.stopAfterConsumeUseElementBridgeCalculationLimit()) {
168+
return null;
169+
}
162170
svgElement.appendChild(n);
163171
}
164172
localRefElement = svgElement;

batik-test-old/src/test/java/org/apache/batik/apps/rasterizer/SVGConverterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,17 @@ protected void configure(SVGConverter c){
415415
addTest(t);
416416
t.setId("OutputTest.reference");
417417

418+
t = new ConverterOutputTest("samples/manyuse.svg", // File to convert
419+
"test-reports/manyuse.png", // Output
420+
"test-references/samples/manyuse.png"); // reference
421+
addTest(t);
422+
t.setId("manyuse");
423+
424+
t = new ConverterOutputTest("samples/3points.svg", // File to convert
425+
"test-reports/3points.png", // Output
426+
"test-references/samples/3points.png"); // reference
427+
addTest(t);
428+
t.setId("3points");
418429
}
419430
}
420431

samples/3points.svg

Lines changed: 5 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)