Author: tilman
Date: Thu Sep 18 10:14:10 2025
New Revision: 1928586

Log:
PDFBOX-6071: check only index 2; add test; improve logging

Modified:
   
pdfbox/branches/2.0/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
   
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java

Modified: 
pdfbox/branches/2.0/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
==============================================================================
--- 
pdfbox/branches/2.0/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
      Thu Sep 18 10:01:03 2025        (r1928585)
+++ 
pdfbox/branches/2.0/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
      Thu Sep 18 10:14:10 2025        (r1928586)
@@ -28,6 +28,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.security.GeneralSecurityException;
 import java.security.KeyStore;
 import java.security.MessageDigest;
@@ -881,6 +882,19 @@ public class TestCreateSignature
         final File file = new File("target/pdfs", 
"PDFBOX-5521-santander_freistellungsauftrag.pdf");
         signing.signDetached(file, new File(outDir + fileNameSigned));
         checkSignature(file, new File(outDir, fileNameSigned), false);
+
+        // PDFBOX-6071: file that has a /ByteRange longer than the file
+        InputStream is = new FileInputStream(file);
+        byte[] ba = IOUtils.toByteArray(is);
+        is.close();
+        ba[2434] = '9'; // change /ByteRange from [ 0 2490 14292 2385472] to [ 
0 2490 14292 2985472]
+        final File file2 = new File("target/pdfs", 
"PDFBOX-6071-santander_freistellungsauftrag.pdf");
+        OutputStream os = new FileOutputStream(file2);
+        os.write(ba);
+        os.close();
+        final String fileNameSigned2 = 
getOutputFileName("PDFBOX-6071-santander_freistellungsauftrag.pdf_signed{0}.pdf");
+        signing.signDetached(file2, new File(outDir + fileNameSigned2));
+        checkSignature(file2, new File(outDir, fileNameSigned2), false);
     }
 
     private void checkLTV(File outFile)

Modified: 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
==============================================================================
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
 Thu Sep 18 10:01:03 2025        (r1928585)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
 Thu Sep 18 10:14:10 2025        (r1928586)
@@ -1152,17 +1152,16 @@ public class COSWriter implements ICOSVi
                 if (byteRange != null && byteRange.size() == 4)
                 {
                     COSBase base2 = byteRange.get(2);
-                    COSBase base3 = byteRange.get(3);
-                    if (base2 instanceof COSInteger && base3 instanceof 
COSInteger)
+                    if (base2 instanceof COSInteger)
                     {
                         // PDFBOX-5521 avoid hitting "old" signatures
                         long br2 = ((COSInteger) base2).longValue();
-                        long br3 = ((COSInteger) base3).longValue();
-                        if (br2 + br3 > incrementalInput.length())
+                        if (br2 > incrementalInput.length())
                         {
                             if (LOG.isDebugEnabled())
                             {
-                                LOG.debug("reachedSignature at offset " + 
getStandardOutput().getPos() + ", byteRange: " + byteRange);
+                                LOG.debug("reachedSignature at offset " + 
getStandardOutput().getPos() +
+                                        ", byteRange: " + byteRange + ", input 
length: " + incrementalInput.length());
                             }
                             reachedSignature = true;
                         }

Reply via email to