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/02/26 21:30:38 UTC

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

Author: lehmi
Date: Thu Feb 26 20:30:38 2015
New Revision: 1662558

URL: http://svn.apache.org/r1662558
Log:
PDFBOX-2527: detect encryption dictionary when rebuilding the trailer dictionary

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=1662558&r1=1662557&r2=1662558&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 Feb 26 20:30:38 2015
@@ -1524,6 +1524,7 @@ public class COSParser extends BaseParse
             xrefTrailerResolver.setStartxref(0);
             trailer = xrefTrailerResolver.getTrailer();
             getDocument().setTrailer(trailer);
+            // search for the different parts of the trailer dictionary 
             for(COSObjectKey key : bfSearchCOSObjectKeyOffsets.keySet())
             {
                 Long offset = bfSearchCOSObjectKeyOffsets.get(key);
@@ -1537,10 +1538,12 @@ public class COSParser extends BaseParse
                     dictionary = parseCOSDictionary();
                     if (dictionary != null)
                     {
+                        // document catalog
                         if (COSName.CATALOG.equals(dictionary.getCOSName(COSName.TYPE)))
                         {
                             trailer.setItem(COSName.ROOT, document.getObjectFromPool(key));
                         }
+                        // info dictionary
                         else if (dictionary.containsKey(COSName.TITLE)
                                 || dictionary.containsKey(COSName.AUTHOR)
                                 || dictionary.containsKey(COSName.SUBJECT)
@@ -1551,7 +1554,17 @@ public class COSParser extends BaseParse
                         {
                             trailer.setItem(COSName.INFO, document.getObjectFromPool(key));
                         }
-                        // TODO find/assign Encrypt entry
+                        // encryption dictionary
+                        else if (dictionary.containsKey(COSName.FILTER)
+                                && (dictionary.containsKey(COSName.V)
+                                        || dictionary.containsKey(COSName.P)
+                                        || dictionary.containsKey(COSName.SUB_FILTER)
+                                        || dictionary.containsKey(COSName.ENCRYPT_META_DATA)
+                                        || dictionary.containsKey(COSName.STM_F)
+                                        || dictionary.containsKey(COSName.STR_F)))
+                        {
+                            trailer.setItem(COSName.ENCRYPT, document.getObjectFromPool(key));
+                        }
                     }
                 }
                 catch(IOException exception)