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)