Author: lehmi Date: Sat Jul 25 13:48:51 2015 New Revision: 1692620 URL: http://svn.apache.org/r1692620 Log: PDFBOX-2845: limit the check for /Length being an indirect object to object streams
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1692620&r1=1692619&r2=1692620&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Sat Jul 25 13:48:51 2015 @@ -695,7 +695,7 @@ public class COSParser extends BaseParse else if (offsetOrObjstmObNr > 0) { // offset of indirect object in file - parseFileObject(offsetOrObjstmObNr, objKey, objNr, objGenNr, pdfObject); + parseFileObject(offsetOrObjstmObNr, objKey, pdfObject); } else { @@ -707,7 +707,7 @@ public class COSParser extends BaseParse return pdfObject.getObject(); } - private void parseFileObject(Long offsetOrObjstmObNr, final COSObjectKey objKey, long objNr, int objGenNr, final COSObject pdfObject) throws IOException + private void parseFileObject(Long offsetOrObjstmObNr, final COSObjectKey objKey, final COSObject pdfObject) throws IOException { // ---- go to object start source.seek(offsetOrObjstmObNr); @@ -738,7 +738,7 @@ public class COSParser extends BaseParse if (securityHandler != null) { - securityHandler.decryptStream(stream, objNr, objGenNr); + securityHandler.decryptStream(stream, objKey.getNumber(), objKey.getGeneration()); } pb = stream; } @@ -767,7 +767,7 @@ public class COSParser extends BaseParse } else if (securityHandler != null) { - securityHandler.decrypt(pb, objNr, objGenNr); + securityHandler.decrypt(pb, objKey.getNumber(), objKey.getGeneration()); } pdfObject.setObject(pb); @@ -819,7 +819,7 @@ public class COSParser extends BaseParse /** * Returns length value referred to or defined in given object. */ - private COSNumber getLength(final COSBase lengthBaseObj) throws IOException + private COSNumber getLength(final COSBase lengthBaseObj, final COSName streamType) throws IOException { if (lengthBaseObj == null) { @@ -832,9 +832,9 @@ public class COSParser extends BaseParse } COSNumber retVal = null; - try { + boolean isObjectStream = COSName.OBJ_STM.equals(streamType); inGetLength = true; // maybe length was given directly if (lengthBaseObj instanceof COSNumber) @@ -849,7 +849,7 @@ public class COSParser extends BaseParse { // not read so far, keep current stream position final long curFileOffset = source.getPosition(); - parseObjectDynamically(lengthObj, true); + parseObjectDynamically(lengthObj, isObjectStream); // reset current stream position source.seek(curFileOffset); if (lengthObj.getObject() == null) @@ -908,7 +908,7 @@ public class COSParser extends BaseParse /* * This needs to be dic.getItem because when we are parsing, the underlying object might still be null. */ - COSNumber streamLengthObj = getLength(dic.getItem(COSName.LENGTH)); + COSNumber streamLengthObj = getLength(dic.getItem(COSName.LENGTH), dic.getCOSName(COSName.TYPE)); if (streamLengthObj == null) { if (isLenient)