Author: tilman
Date: Thu Sep 18 10:01:03 2025
New Revision: 1928585
Log:
PDFBOX-6071: check only index 2; add test; improve logging
Modified:
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Modified:
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
==============================================================================
---
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
Thu Sep 18 10:00:53 2025 (r1928584)
+++
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
Thu Sep 18 10:01:03 2025 (r1928585)
@@ -949,6 +949,15 @@ class TestCreateSignature
final File file = new File("target/pdfs",
"PDFBOX-5521-santander_freistellungsauftrag.pdf");
signing.signDetached(file, new File(OUT_DIR + fileNameSigned));
checkSignature(file, new File(OUT_DIR, fileNameSigned), false);
+
+ // PDFBOX-6071: file that has a /ByteRange longer than the file
+ byte[] ba = Files.readAllBytes(file.toPath());
+ 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");
+ Files.write(file2.toPath(), ba);
+ final String fileNameSigned2 =
getOutputFileName("PDFBOX-6071-santander_freistellungsauftrag.pdf_signed{0}.pdf",
externallySign);
+ signing.signDetached(file2, new File(OUT_DIR + fileNameSigned2));
+ checkSignature(file2, new File(OUT_DIR, fileNameSigned2), false);
}
private void checkLTV(File outFile)
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Thu Sep 18 10:00:53 2025 (r1928584)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Thu Sep 18 10:01:03 2025 (r1928585)
@@ -1281,15 +1281,14 @@ 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())
{
- LOG.debug("reachedSignature at offset {},
byteRange: {}", getStandardOutput().getPos(), byteRange);
+ LOG.debug("reachedSignature at offset {},
byteRange: {}, input length: {}",
+ getStandardOutput().getPos(), byteRange,
incrementalInput.length());
reachedSignature = true;
}
}