You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2020/06/17 06:13:56 UTC

svn commit: r1878912 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java

Author: lehmi
Date: Wed Jun 17 06:13:56 2020
New Revision: 1878912

URL: http://svn.apache.org/viewvc?rev=1878912&view=rev
Log:
PDFBOX-3888: close stream after reading the object numbers

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java?rev=1878912&r1=1878911&r2=1878912&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java Wed Jun 17 06:13:56 2020
@@ -63,8 +63,8 @@ public class PDFObjectStreamParser exten
     }
 
     /**
-     * Search for/parse the object with the given object number. This will close the stream when it is finished parsing.
-     * The stream is closed after parsing the object with the given number.
+     * Search for/parse the object with the given object number. The stream is closed after parsing the object with the
+     * given number.
      * 
      * @param objectNumber the number of the object to b e parsed
      * @return the parsed object or null if the object with the given number can't be found
@@ -75,7 +75,7 @@ public class PDFObjectStreamParser exten
         COSBase streamObject = null;
         try
         {
-            Integer objectOffset = readObjectNumbers().get(objectNumber);
+            Integer objectOffset = privateReadObjectNumbers().get(objectNumber);
             if (objectOffset != null) 
             {
                 // jump to the offset of the first object
@@ -92,25 +92,40 @@ public class PDFObjectStreamParser exten
         finally
         {
             source.close();
+            document = null;
         }
         return streamObject;
     }
 
+    private Map<Long, Integer> privateReadObjectNumbers() throws IOException
+    {
+        Map<Long, Integer> objectNumbers = new HashMap<>(numberOfObjects);
+        for (int i = 0; i < numberOfObjects; i++)
+        {
+            long objectNumber = readObjectNumber();
+            int offset = (int) readLong();
+            objectNumbers.put(objectNumber, offset);
+        }
+        return objectNumbers;
+    }
+
     /**
-     * Read all object numbers from the compressed object stream. The stream is not closed after reading the object
-     * numbers.
+     * Read all object numbers from the compressed object stream. The stream is closed after reading the object numbers.
      * 
      * @return a map off all object numbers and the corresponding offset within the object stream.
      * @throws IOException if there is an error while parsing the stream
      */
     public Map<Long, Integer> readObjectNumbers() throws IOException
     {
-        Map<Long, Integer> objectNumbers = new HashMap<>(numberOfObjects);
-        for (int i = 0; i < numberOfObjects; i++)
+        Map<Long, Integer> objectNumbers = null;
+        try
         {
-            long objectNumber = readObjectNumber();
-            int offset = (int) readLong();
-            objectNumbers.put(objectNumber, offset);
+            objectNumbers = privateReadObjectNumbers();
+        }
+        finally
+        {
+            source.close();
+            document = null;
         }
         return objectNumbers;
     }