You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2015/03/31 21:48:44 UTC

svn commit: r1670448 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: PatchMeshesShadingContext.java Type4ShadingContext.java Type5ShadingContext.java

Author: tilman
Date: Tue Mar 31 19:48:44 2015
New Revision: 1670448

URL: http://svn.apache.org/r1670448
Log:
PDFBOX-2576: avoid resource leaks, as suggested by Martin Schröder

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java?rev=1670448&r1=1670447&r2=1670448&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java Tue Mar 31 19:48:44 2015
@@ -93,61 +93,66 @@ abstract class PatchMeshesShadingContext
         COSStream cosStream = (COSStream) dict;
 
         ImageInputStream mciis = new MemoryCacheImageInputStream(cosStream.getUnfilteredStream());
-
-        Point2D[] implicitEdge = new Point2D[4];
-        float[][] implicitCornerColor = new float[2][numberOfColorComponents];
-
-        byte flag = (byte) 0;
-
         try
         {
-            flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-        }
-        catch (EOFException ex)
-        {
-            LOG.error(ex);
-        }
+            Point2D[] implicitEdge = new Point2D[4];
+            float[][] implicitCornerColor = new float[2][numberOfColorComponents];
+
+            byte flag = (byte) 0;
 
-        while (true)
-        {
             try
             {
-                boolean isFree = (flag == 0);
-                Patch current = readPatch(mciis, isFree, implicitEdge, implicitCornerColor,
-                        maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform, numP);
-                if (current == null)
-                {
-                    break;
-                }
-                list.add(current);
                 flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-                switch (flag)
-                {
-                    case 0:
-                        break;
-                    case 1:
-                        implicitEdge = current.getFlag1Edge();
-                        implicitCornerColor = current.getFlag1Color();
-                        break;
-                    case 2:
-                        implicitEdge = current.getFlag2Edge();
-                        implicitCornerColor = current.getFlag2Color();
-                        break;
-                    case 3:
-                        implicitEdge = current.getFlag3Edge();
-                        implicitCornerColor = current.getFlag3Color();
-                        break;
-                    default:
-                        LOG.warn("bad flag: " + flag);
-                        break;
-                }
             }
             catch (EOFException ex)
             {
-                break;
+                LOG.error(ex);
+            }
+
+            while (true)
+            {
+                try
+                {
+                    boolean isFree = (flag == 0);
+                    Patch current = readPatch(mciis, isFree, implicitEdge, implicitCornerColor,
+                            maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform, numP);
+                    if (current == null)
+                    {
+                        break;
+                    }
+                    list.add(current);
+                    flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
+                    switch (flag)
+                    {
+                        case 0:
+                            break;
+                        case 1:
+                            implicitEdge = current.getFlag1Edge();
+                            implicitCornerColor = current.getFlag1Color();
+                            break;
+                        case 2:
+                            implicitEdge = current.getFlag2Edge();
+                            implicitCornerColor = current.getFlag2Color();
+                            break;
+                        case 3:
+                            implicitEdge = current.getFlag3Edge();
+                            implicitCornerColor = current.getFlag3Color();
+                            break;
+                        default:
+                            LOG.warn("bad flag: " + flag);
+                            break;
+                    }
+                }
+                catch (EOFException ex)
+                {
+                    break;
+                }
             }
         }
-        mciis.close();
+        finally
+        {
+            mciis.close();
+        }
         return list;
     }
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java?rev=1670448&r1=1670447&r2=1670448&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java Tue Mar 31 19:48:44 2015
@@ -82,82 +82,87 @@ class Type4ShadingContext extends Gourau
         COSStream stream = (COSStream) dict;
 
         ImageInputStream mciis = new MemoryCacheImageInputStream(stream.getUnfilteredStream());
-
-        byte flag = (byte) 0;
         try
         {
-            flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-        }
-        catch (EOFException ex)
-        {
-            LOG.error(ex);
-        }
-
-        while (true)
-        {
-            Vertex p0, p1, p2;
-            Point2D[] ps;
-            float[][] cs;
-            int lastIndex;
+            byte flag = (byte) 0;
             try
             {
-                switch (flag)
+                flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
+            }
+            catch (EOFException ex)
+            {
+                LOG.error(ex);
+            }
+
+            while (true)
+            {
+                Vertex p0, p1, p2;
+                Point2D[] ps;
+                float[][] cs;
+                int lastIndex;
+                try
                 {
-                    case 0:
-                        p0 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
-                                        matrix, xform);
-                        flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-                        if (flag != 0)
-                        {
-                            LOG.error("bad triangle: " + flag);
-                        }
-                        p1 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
-                                        matrix, xform);
-                        mciis.readBits(bitsPerFlag);
-                        if (flag != 0)
-                        {
-                            LOG.error("bad triangle: " + flag);
-                        }
-                        p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
-                                        matrix, xform);
-                        ps = new Point2D[] { p0.point, p1.point, p2.point };
-                        cs = new float[][] { p0.color, p1.color, p2.color };
-                        list.add(new ShadedTriangle(ps, cs));
-                        flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-                        break;
-                    case 1:
-                    case 2:
-                        lastIndex = list.size() - 1;
-                        if (lastIndex < 0)
-                        {
-                            LOG.error("broken data stream: " + list.size());
-                        }
-                        else
-                        {
-                            ShadedTriangle preTri = list.get(lastIndex);
-                            p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY,
-                                            colRange, matrix, xform);
-                            ps = new Point2D[] { flag == 1 ? preTri.corner[1] : preTri.corner[0],
-                                                 preTri.corner[2],
-                                                 p2.point };
-                            cs = new float[][] { flag == 1 ? preTri.color[1] : preTri.color[0],
-                                                 preTri.color[2],
-                                                 p2.color };
+                    switch (flag)
+                    {
+                        case 0:
+                            p0 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
+                                            matrix, xform);
+                            flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
+                            if (flag != 0)
+                            {
+                                LOG.error("bad triangle: " + flag);
+                            }
+                            p1 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
+                                            matrix, xform);
+                            mciis.readBits(bitsPerFlag);
+                            if (flag != 0)
+                            {
+                                LOG.error("bad triangle: " + flag);
+                            }
+                            p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange,
+                                            matrix, xform);
+                            ps = new Point2D[] { p0.point, p1.point, p2.point };
+                            cs = new float[][] { p0.color, p1.color, p2.color };
                             list.add(new ShadedTriangle(ps, cs));
                             flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
-                        }
-                        break;
-                    default:
-                        LOG.warn("bad flag: " + flag);
-                        break;
+                            break;
+                        case 1:
+                        case 2:
+                            lastIndex = list.size() - 1;
+                            if (lastIndex < 0)
+                            {
+                                LOG.error("broken data stream: " + list.size());
+                            }
+                            else
+                            {
+                                ShadedTriangle preTri = list.get(lastIndex);
+                                p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY,
+                                                colRange, matrix, xform);
+                                ps = new Point2D[] { flag == 1 ? preTri.corner[1] : preTri.corner[0],
+                                                     preTri.corner[2],
+                                                     p2.point };
+                                cs = new float[][] { flag == 1 ? preTri.color[1] : preTri.color[0],
+                                                     preTri.color[2],
+                                                     p2.color };
+                                list.add(new ShadedTriangle(ps, cs));
+                                flag = (byte) (mciis.readBits(bitsPerFlag) & 3);
+                            }
+                            break;
+                        default:
+                            LOG.warn("bad flag: " + flag);
+                            break;
+                    }
+                }
+                catch (EOFException ex)
+                {
+                    break;
                 }
             }
-            catch (EOFException ex)
-            {
-                break;
-            }
         }
-        mciis.close();
+        finally
+        {
+            mciis.close();
+        }
         return list;
     }
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java?rev=1670448&r1=1670447&r2=1670448&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java Tue Mar 31 19:48:44 2015
@@ -83,19 +83,26 @@ class Type5ShadingContext extends Gourau
         COSStream cosStream = (COSStream) cosDictionary;
 
         ImageInputStream mciis = new MemoryCacheImageInputStream(cosStream.getUnfilteredStream());
-        while (true)
+        try
         {
-            Vertex p;
-            try
+            while (true)
             {
-                p = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform);
-                vlist.add(p);
-            }
-            catch (EOFException ex)
-            {
-                break;
+                Vertex p;
+                try
+                {
+                    p = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform);
+                    vlist.add(p);
+                }
+                catch (EOFException ex)
+                {
+                    break;
+                }
             }
         }
+        finally
+        {
+            mciis.close();
+        }
         int sz = vlist.size(), rowNum = sz / numPerRow;
         Vertex[][] latticeArray = new Vertex[rowNum][numPerRow];
         if (rowNum < 2)