PDFBOX-5660: dispose graphics even if exception is thrown, as suggested by Valery Bokov; closes #434

git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1932896 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
index 589c62a..e3e766c 100644
--- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
+++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
@@ -326,28 +326,33 @@
 

         // use a transparent background if the image type supports alpha

         Graphics2D g = image.createGraphics();

-        if (image.getType() == BufferedImage.TYPE_INT_ARGB)

+        try

         {

-            g.setBackground(new Color(0, 0, 0, 0));

-        }

-        else

-        {

-            g.setBackground(Color.WHITE);

-        }

-        g.clearRect(0, 0, image.getWidth(), image.getHeight());

-        

-        transform(g, page.getRotation(), cropBox, scale, scale);

+            if (image.getType() == BufferedImage.TYPE_INT_ARGB)

+            {

+                g.setBackground(new Color(0, 0, 0, 0));

+            }

+            else

+            {

+                g.setBackground(Color.WHITE);

+            }

+            g.clearRect(0, 0, image.getWidth(), image.getHeight());

 

-        // the end-user may provide a custom PageDrawer

-        RenderingHints actualRenderingHints =

-                renderingHints == null ? createDefaultRenderingHints(g) : renderingHints;

-        PageDrawerParameters parameters =

-                new PageDrawerParameters(this, page, subsamplingAllowed, destination,

-                        actualRenderingHints, imageDownscalingOptimizationThreshold);

-        PageDrawer drawer = createPageDrawer(parameters);

-        drawer.drawPage(g, cropBox);

-        

-        g.dispose();

+            transform(g, page.getRotation(), cropBox, scale, scale);

+

+            // the end-user may provide a custom PageDrawer

+            RenderingHints actualRenderingHints

+                    = renderingHints == null ? createDefaultRenderingHints(g) : renderingHints;

+            PageDrawerParameters parameters

+                    = new PageDrawerParameters(this, page, subsamplingAllowed, destination,

+                            actualRenderingHints, imageDownscalingOptimizationThreshold);

+            PageDrawer drawer = createPageDrawer(parameters);

+            drawer.drawPage(g, cropBox);

+        }

+        finally

+        {

+            g.dispose();

+        }

 

         if (image.getType() != imageType.toBufferedImageType())

         {