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 2014/08/12 18:54:58 UTC
svn commit: r1617528 - in
/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser:
NonSequentialPDFParser.java PDFParser.java
Author: lehmi
Date: Tue Aug 12 16:54:58 2014
New Revision: 1617528
URL: http://svn.apache.org/r1617528
Log:
PDFBOX-2250: don't override offset/trailer when parsing the cross reference stream of a hybrid xref table
Modified:
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java?rev=1617528&r1=1617527&r2=1617528&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java Tue Aug 12 16:54:58 2014
@@ -378,7 +378,7 @@ public class NonSequentialPDFParser exte
int streamOffset = trailer.getInt(COSName.XREF_STM);
setPdfSource(streamOffset);
skipSpaces();
- parseXrefObjStream(prev);
+ parseXrefObjStream(prev, false);
}
prev = trailer.getInt(COSName.PREV);
if (isLenient && prev > -1)
@@ -395,7 +395,7 @@ public class NonSequentialPDFParser exte
else
{
// parse xref stream
- prev = parseXrefObjStream(prev);
+ prev = parseXrefObjStream(prev, true);
if (isLenient && prev > -1)
{
// check the xref table reference
@@ -514,7 +514,7 @@ public class NonSequentialPDFParser exte
* @return value of PREV item in dictionary or <code>-1</code> if no such
* item exists
*/
- private long parseXrefObjStream(long objByteOffset) throws IOException
+ private long parseXrefObjStream(long objByteOffset, boolean isStandalone) throws IOException
{
// ---- parse indirect object head
readObjectNumber();
@@ -523,8 +523,7 @@ public class NonSequentialPDFParser exte
COSDictionary dict = parseCOSDictionary();
COSStream xrefStream = parseCOSStream(dict, getDocument().getScratchFile());
- parseXrefStream(xrefStream, (int) objByteOffset);
-
+ parseXrefStream(xrefStream, (int) objByteOffset,isStandalone);
return dict.getLong(COSName.PREV);
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java?rev=1617528&r1=1617527&r2=1617528&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java Tue Aug 12 16:54:58 2014
@@ -884,8 +884,26 @@ public class PDFParser extends BaseParse
*/
public void parseXrefStream( COSStream stream, long objByteOffset ) throws IOException
{
- xrefTrailerResolver.nextXrefObj( objByteOffset );
- xrefTrailerResolver.setTrailer( stream );
+ parseXrefStream(stream, objByteOffset, true);
+ }
+
+ /**
+ * Fills XRefTrailerResolver with data of given stream.
+ * Stream must be of type XRef.
+ * @param stream the stream to be read
+ * @param objByteOffset the offset to start at
+ * @param isStandalone should be set to true if the stream is not part of a hybrid xref table
+ * @throws IOException if there is an error parsing the stream
+ */
+ public void parseXrefStream( COSStream stream, long objByteOffset, boolean isStandalone ) throws IOException
+ {
+ // the cross reference stream of a hybrid xref table will be added to the existing one
+ // and we must not override the offset and the trailer
+ if (isStandalone)
+ {
+ xrefTrailerResolver.nextXrefObj( objByteOffset );
+ xrefTrailerResolver.setTrailer( stream );
+ }
PDFXrefStreamParser parser =
new PDFXrefStreamParser( stream, document, forceParsing, xrefTrailerResolver );
parser.parse();