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 2017/11/23 16:59:02 UTC

svn commit: r1816172 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

Author: lehmi
Date: Thu Nov 23 16:59:02 2017
New Revision: 1816172

URL: http://svn.apache.org/viewvc?rev=1816172&view=rev
Log:
PDFBOX-4018: optimized checkObjectKey method

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=1816172&r1=1816171&r2=1816172&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 Thu Nov 23 16:59:02 2017
@@ -1358,7 +1358,7 @@ public class COSParser extends BaseParse
             // a negative offset number represents a object number itself
             // see type 2 entry in xref stream
             if (objectOffset != null && objectOffset >= 0
-                    && !checkObjectKeys(objectKey, objectOffset))
+                    && !checkObjectKey(objectKey, objectOffset))
             {
                 LOG.debug("Stop checking xref offsets as at least one (" + objectKey
                         + ") couldn't be dereferenced");
@@ -1401,25 +1401,25 @@ public class COSParser extends BaseParse
      * @return returns true if the given object can be dereferenced at the given offset
      * @throws IOException if something went wrong
      */
-    private boolean checkObjectKeys(COSObjectKey objectKey, long offset) throws IOException
+    private boolean checkObjectKey(COSObjectKey objectKey, long offset) throws IOException
     {
         // there can't be any object at the very beginning of a pdf
         if (offset < MINIMUM_SEARCH_OFFSET)
         {
             return false;
         }
-        long objectNr = objectKey.getNumber();
-        int objectGen = objectKey.getGeneration();
+        boolean objectKeyFound = false;
         long originOffset = source.getPosition();
-        String objectString = createObjectString(objectNr, objectGen);
         try 
         {
             source.seek(offset);
-            if (isString(objectString.getBytes(ISO_8859_1)))
+            // try to read the given object/generation number
+            if (objectKey.getNumber() == readObjectNumber()
+                    && objectKey.getGeneration() == readGenerationNumber())
             {
-                // everything is ok, return origin object key
-                source.seek(originOffset);
-                return true;
+                // finally tro to read the object marker
+                readExpectedString(OBJ_MARKER, true);
+                objectKeyFound = true;
             }
         }
         catch (IOException exception)
@@ -1430,19 +1430,8 @@ public class COSParser extends BaseParse
         {
             source.seek(originOffset);
         }
-        // no valid object number found
-        return false;
-    }
-    /**
-     * Create a string for the given object id.
-     * 
-     * @param objectID the object id
-     * @param genID the generation id
-     * @return the generated string
-     */
-    private String createObjectString(long objectID, int genID)
-    {
-        return Long.toString(objectID) + " " + Integer.toString(genID) + " obj";
+        // return resulting value
+        return objectKeyFound;
     }
 
     private Map<COSObjectKey, Long> getBFCOSObjectOffsets() throws IOException