Author: lehmi
Date: Mon Dec 17 17:54:33 2012
New Revision: 1423061
URL: http://svn.apache.org/viewvc?rev=1423061&view=rev
Log:
PDFBOX-1468: don't decrypt anything but strings or streams within a dictionary
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java?rev=1423061&r1=1423060&r2=1423061&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java
Mon Dec 17 17:54:33 2012
@@ -309,11 +309,9 @@ public abstract class SecurityHandler
try {
byte buffer[] = new byte[4096];
- long count = 0L;
for(int n = 0; -1 != (n = cipherStream.read(buffer));)
{
output.write(buffer, 0, n);
- count += n;
}
}
finally {
@@ -454,10 +452,14 @@ public abstract class SecurityHandler
{
for( Map.Entry<COSName, COSBase> entry : dictionary.entrySet() )
{
+ COSBase value = entry.getValue();
+ // within a dictionary only strings and streams have to be
decrypted
+ if (!(value instanceof COSString) && !(value instanceof COSStream))
+ continue;
//if we are a signature dictionary and contain a Contents entry
then
//we don't decrypt it.
if( !(entry.getKey().getName().equals( "Contents" ) &&
- entry.getValue() instanceof COSString &&
+ value instanceof COSString &&
potentialSignatures.contains( dictionary )))
{
decrypt( entry.getValue(), objNum, genNum );