Author: lehmi Date: Sat Jul 25 14:23:15 2015 New Revision: 1692623 URL: http://svn.apache.org/r1692623 Log: PDFBOX-2845: removed the recursion check in getLength
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=1692623&r1=1692622&r2=1692623&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 14:23:15 2015 @@ -814,8 +814,6 @@ public class COSParser extends BaseParse } } - private boolean inGetLength = false; - /** * Returns length value referred to or defined in given object. */ @@ -826,53 +824,40 @@ public class COSParser extends BaseParse return null; } - if (inGetLength) + COSNumber retVal = null; + boolean isObjectStream = COSName.OBJ_STM.equals(streamType); + // maybe length was given directly + if (lengthBaseObj instanceof COSNumber) { - throw new IOException("Loop while reading length from " + lengthBaseObj); + retVal = (COSNumber) lengthBaseObj; } - - COSNumber retVal = null; - try + // length in referenced object + else if (lengthBaseObj instanceof COSObject) { - boolean isObjectStream = COSName.OBJ_STM.equals(streamType); - inGetLength = true; - // maybe length was given directly - if (lengthBaseObj instanceof COSNumber) + COSObject lengthObj = (COSObject) lengthBaseObj; + if (lengthObj.getObject() == null) { - retVal = (COSNumber) lengthBaseObj; - } - // length in referenced object - else if (lengthBaseObj instanceof COSObject) - { - COSObject lengthObj = (COSObject) lengthBaseObj; + // not read so far, keep current stream position + final long curFileOffset = source.getPosition(); + parseObjectDynamically(lengthObj, isObjectStream); + // reset current stream position + source.seek(curFileOffset); if (lengthObj.getObject() == null) { - // not read so far, keep current stream position - final long curFileOffset = source.getPosition(); - parseObjectDynamically(lengthObj, isObjectStream); - // reset current stream position - source.seek(curFileOffset); - if (lengthObj.getObject() == null) - { - throw new IOException("Length object content was not read."); - } - } - if (!(lengthObj.getObject() instanceof COSNumber)) - { - throw new IOException("Wrong type of referenced length object " + lengthObj - + ": " + lengthObj.getObject().getClass().getSimpleName()); + throw new IOException("Length object content was not read."); } - retVal = (COSNumber) lengthObj.getObject(); } - else + if (!(lengthObj.getObject() instanceof COSNumber)) { - throw new IOException("Wrong type of length object: " - + lengthBaseObj.getClass().getSimpleName()); + throw new IOException("Wrong type of referenced length object " + lengthObj + + ": " + lengthObj.getObject().getClass().getSimpleName()); } + retVal = (COSNumber) lengthObj.getObject(); } - finally + else { - inGetLength = false; + throw new IOException("Wrong type of length object: " + + lengthBaseObj.getClass().getSimpleName()); } return retVal; }