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/26 13:17:31 UTC
svn commit: r1692714 -
/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.java
Author: lehmi
Date: Sun Jul 26 11:17:30 2015
New Revision: 1692714
URL: http://svn.apache.org/r1692714
Log:
PDFBOX-2845: limit the check for /Length being an indirect object to object streams, removed the recursion check in getLength
Modified:
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/NonSequentialPDFParser.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=1692714&r1=1692713&r2=1692714&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 Sun Jul 26 11:17:30 2015
@@ -1605,74 +1605,55 @@ public class NonSequentialPDFParser exte
}
}
- // ------------------------------------------------------------------------
- private boolean inGetLength = false;
-
/** 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 COSBase streamType) throws IOException
{
if (lengthBaseObj == null)
{
return null;
}
-
- if (inGetLength)
+ COSNumber retVal = null;
+ // ---- 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)
{
- inGetLength = true;
+ COSObject lengthObj = (COSObject) lengthBaseObj;
- // ---- maybe length was given directly
- if (lengthBaseObj instanceof COSNumber)
+ if (lengthObj.getObject() == null)
{
- retVal = (COSNumber) lengthBaseObj;
- }
- // ---- length in referenced object
- else if (lengthBaseObj instanceof COSObject)
- {
- COSObject lengthObj = (COSObject) lengthBaseObj;
-
- if (lengthObj.getObject() == null)
- {
- // not read so far
-
- // keep current stream position
- final long curFileOffset = getPdfSourceOffset();
- releasePdfSourceInputStream();
+ // not read so far
- parseObjectDynamically(lengthObj, true);
+ // keep current stream position
+ final long curFileOffset = getPdfSourceOffset();
+ releasePdfSourceInputStream();
+ boolean isObjectStream = COSName.OBJ_STM.equals(streamType);
+ parseObjectDynamically(lengthObj, isObjectStream);
- // reset current stream position
- setPdfSource(curFileOffset);
+ // reset current stream position
+ setPdfSource(curFileOffset);
- if (lengthObj.getObject() == null)
- {
- throw new IOException("Length object content was not read.");
- }
- }
-
- if (!(lengthObj.getObject() instanceof COSNumber))
+ if (lengthObj.getObject() == null)
{
- 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;
}
@@ -1742,7 +1723,7 @@ public class NonSequentialPDFParser exte
/*
* 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.getItem(COSName.TYPE));
if (streamLengthObj == null)
{
if (isLenient)