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;
}