[ 
https://issues.apache.org/jira/browse/BATIK-1290?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Emmeran Seehuber updated BATIK-1290:
------------------------------------
    Summary: [PATCH] AbstractGraphicsNode.paint() sometimes does not dispose a 
Graphics2D child context  (was: AbstractGraphicsNode.paint() somethings does 
not dispose a Graphics2D child context)

> [PATCH] AbstractGraphicsNode.paint() sometimes does not dispose a Graphics2D 
> child context
> ------------------------------------------------------------------------------------------
>
>                 Key: BATIK-1290
>                 URL: https://issues.apache.org/jira/browse/BATIK-1290
>             Project: Batik
>          Issue Type: Bug
>          Components: GVT
>    Affects Versions: 1.13, 1.12
>            Reporter: Emmeran Seehuber
>            Priority: Major
>         Attachments: batik_gvt_fix_danlging_gfx.patch, openhtml_536.svg
>
>
> In some (rare?) cases, org.apache.batik.gvt.AbstractGraphicsNode::paint() 
> calls g2d.create() twice, but only calls dispose() on one of the child 
> Graphics2D.
> Because a clip is set, in line 456 the first child Graphics2D is created. 
> Later in line 503 useOffscreen is true. This causes in line 535 the baseG2d 
> (which was stored to be later be dispose()ed) is overridden the the child 
> created in line 456. Then in line 539 a new child Graphics2D is created. And 
> only this second child is disposed in line 552, the first child is never 
> disposed.
> This is a problem if the used Graphics2D needs the dispose() calls to be 
> "balanced" and correct. Which is the case when using it with my 
> PdfBoxGraphics2D-Adapter ([https://github.com/rototor/pdfbox-graphics2d]). 
> The child Graphics2D write a "q" (Save State) into the PDF stream and 
> therefore need a matching "Q" (Restore State) - which is written when calling 
> dispose(). Otherwise the PDF would be invalid.
> The attached patch fixes this by only creating a child Graphics2D if not 
> already one exists.
> I also attached the SVG file that triggers the problem. It has transparency, 
> so it is rendered to an offscreen image first but also has a clip set.
> For a "ready to use" example to reproduce this bug you can clone 
> [https://github.com/rototor/pdfbox-graphics2d], enable the testcase for this 
> ([https://github.com/rototor/pdfbox-graphics2d/blob/master/src/test/java/de/rototor/pdfbox/graphics2d/RenderSVGsTest.java#L40])
>  and run mvn test. It will then fail because of this bug.
> This issue was originally reported in the openhtmltopdf project 
> ([https://github.com/danfickle/openhtmltopdf/issues/536])



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-h...@xmlgraphics.apache.org

Reply via email to