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;
}