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 2021/04/25 10:35:50 UTC
svn commit: r1889168 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java
Author: lehmi
Date: Sun Apr 25 10:35:50 2021
New Revision: 1889168
URL: http://svn.apache.org/viewvc?rev=1889168&view=rev
Log:
PDFBOX-5177: don't use number of objects to initialize list of objects, don't read beyond the part of the stream reserved for object numbers
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java?rev=1889168&r1=1889167&r2=1889168&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java Sun Apr 25 10:35:50 2021
@@ -92,7 +92,7 @@ public class PDFObjectStreamParser exten
try
{
Map<Integer, Long> offsets = readOffsets();
- streamObjects = new ArrayList<COSObject>( numberOfObjects );
+ streamObjects = new ArrayList<COSObject>(offsets.size());
for (Entry<Integer, Long> offset : offsets.entrySet())
{
COSBase cosObject = parseObject(offset.getKey());
@@ -128,8 +128,14 @@ public class PDFObjectStreamParser exten
// but we can't rely on that, so that we have to sort the offsets
// as the sequential parsers relies on it, see PDFBOX-4927
Map<Integer, Long> objectNumbers = new TreeMap<Integer, Long>();
+ long firstObjectPosition = seqSource.getPosition() + firstObject - 1;
for (int i = 0; i < numberOfObjects; i++)
{
+ // don't read beyond the part of the stream reserved for the object numbers
+ if (seqSource.getPosition() >= firstObjectPosition)
+ {
+ break;
+ }
long objectNumber = readObjectNumber();
int offset = (int) readLong();
objectNumbers.put(offset, objectNumber);