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 2015/07/25 16:23:15 UTC
svn commit: r1692623 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
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;
}