You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by Neil Cannon <ne...@everyday.u-net.com> on 2001/02/07 10:50:12 UTC

Bug Report: StackOverflowError

The rasterizer app. goes into infinite recursion on the following SVG
document. I think it does it on simpler documents, but I haven't got a
"simplest case" doc. yet. Hopefully someone who knows the code will just
look at the stack trace and go "Aha!" :)

This is on beta2rc2.

Neil


Exception in thread "main" java.lang.StackOverflowError
        at java.lang.Math.min(Math.java:724)
        at java.io.StringReader.read(StringReader.java:85)
        at org.apache.batik.util.InputBuffer.<init>(InputBuffer.java:97)
        at
org.apache.batik.parser.AbstractParser.initialize(AbstractParser.java:110)
        at org.apache.batik.parser.LengthParser.parse(LengthParser.java:65)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:47)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
        at
org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
59)
        at
org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
        at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
        at
org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
UnitProcessorContext.java:69)
...
etc.

Re: Bug Report: StackOverflowError

Posted by Vincent Hardy <vh...@eng.sun.com>.
Neil,

Thanks for reporting that problem. Your document hits on an interesting
problem where an svg element uses % to define its viewport widht/height
and that causes Batik to get into an infinite loop....

What is happening is that our SVGViewport object refers to itself when
trying to resolve percentages...

We will fix this.
Thanks.
V.

Neil Cannon wrote:
> 
> The rasterizer app. goes into infinite recursion on the following SVG
> document. I think it does it on simpler documents, but I haven't got a
> "simplest case" doc. yet. Hopefully someone who knows the code will just
> look at the stack trace and go "Aha!" :)
> 
> This is on beta2rc2.
> 
> Neil
> 
> Exception in thread "main" java.lang.StackOverflowError
>         at java.lang.Math.min(Math.java:724)
>         at java.io.StringReader.read(StringReader.java:85)
>         at org.apache.batik.util.InputBuffer.<init>(InputBuffer.java:97)
>         at
> org.apache.batik.parser.AbstractParser.initialize(AbstractParser.java:110)
>         at org.apache.batik.parser.LengthParser.parse(LengthParser.java:65)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:47)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
>         at
> org.apache.batik.util.UnitProcessor.percentagesToPixels(UnitProcessor.java:4
> 59)
>         at
> org.apache.batik.util.UnitProcessor.svgToUserSpace(UnitProcessor.java:177)
>         at org.apache.batik.bridge.SVGViewport.getWidth(SVGViewport.java:48)
>         at
> org.apache.batik.bridge.DefaultUnitProcessorContext.getViewportWidth(Default
> UnitProcessorContext.java:69)
> ...
> etc.
> 
>   ------------------------------------------------------------------------
>                 Name: chart.svg
>    chart.svg    Type: Scalable Vector Graphics (image/svg)
>             Encoding: quoted-printable
> 
>   ------------------------------------------------------------------------
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
> For additional commands, e-mail: batik-dev-help@xml.apache.org