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 2014/06/18 20:35:36 UTC

svn commit: r1603567 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox: pdfwriter/COSWriter.java pdmodel/PDDocument.java

Author: lehmi
Date: Wed Jun 18 18:35:36 2014
New Revision: 1603567

URL: http://svn.apache.org/r1603567
Log:
PDFBOX-2082: avoid corruption when writing the signature as proposed by Štěpán Schejbal

Modified:
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java?rev=1603567&r1=1603566&r2=1603567&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java Wed Jun 18 18:35:36 2014
@@ -783,12 +783,13 @@ public class COSWriter implements ICOSVi
             SignatureInterface signatureInterface = doc.getSignatureInterface();
             byte[] sign = signatureInterface.sign(new ByteArrayInputStream(pdfContent));
             String signature = new COSString(sign).getHexString();
-            int leftSignaturerange = signaturePosition[1]-signaturePosition[0]-signature.length();
-            if(leftSignaturerange<0)
+            int startPos = signaturePosition[0] + 1; // move past "<"
+            int endPos = signaturePosition[1] - 1; // move in front of ">"
+            if (startPos + signature.length() > endPos)            
             {
                 throw new IOException("Can't write signature, not enough space");
             }
-            getStandardOutput().setPos(signaturePosition[0]+1);
+            getStandardOutput().setPos(startPos);
             getStandardOutput().write(signature.getBytes());
         }
     }

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1603567&r1=1603566&r2=1603567&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Wed Jun 18 18:35:36 2014
@@ -306,11 +306,11 @@ public class PDDocument implements Pagea
         int preferedSignatureSize = options.getPreferedSignatureSize();
         if (preferedSignatureSize > 0)
         {
-            sigObject.setContents(new byte[preferedSignatureSize * 2 + 2]);
+            sigObject.setContents(new byte[preferedSignatureSize]);
         }
         else
         {
-            sigObject.setContents(new byte[0x2500 * 2 + 2]);
+            sigObject.setContents(new byte[0x2500]);
         }
         
         // Reserve ByteRange