From 31a8f4dda38e1323a28ca0109fb457967352e5df Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 18 Jul 2026 10:15:27 +1000 Subject: [PATCH 1/5] . --- ...ests.VerifyFopRenderedPdf#pdf.verified.pdf | Bin 0 -> 5282 bytes ...FopTests.VerifyFopRenderedPdf.verified.png | Bin 0 -> 58737 bytes ...FopTests.VerifyFopRenderedPdf.verified.txt | 11 + src/Tests/PdfNormalizerTests.cs | 33 +- ...ples.VerifyPageDimensions#pdf.verified.pdf | Bin 2733 -> 2718 bytes src/Tests/Samples.VerifyPdf#pdf.verified.pdf | Bin 2733 -> 2718 bytes .../Samples.VerifyPdfStream#pdf.verified.pdf | Bin 2733 -> 2718 bytes ...erifyPreserveTransparency#pdf.verified.pdf | Bin 2733 -> 2718 bytes src/Tests/Tests.csproj | 2 +- src/Tests/sample-fop-compact.pdf | Bin 0 -> 5318 bytes src/Tests/sample-fop-indented.pdf | Bin 0 -> 5453 bytes src/Verify.DocNet/PdfNormalizer.cs | 475 +++++++++++++++++- src/Verify.DocNet/VerifyDocNet_Pdf.cs | 2 +- 13 files changed, 507 insertions(+), 16 deletions(-) create mode 100644 src/Tests/FopTests.VerifyFopRenderedPdf#pdf.verified.pdf create mode 100644 src/Tests/FopTests.VerifyFopRenderedPdf.verified.png create mode 100644 src/Tests/FopTests.VerifyFopRenderedPdf.verified.txt create mode 100644 src/Tests/sample-fop-compact.pdf create mode 100644 src/Tests/sample-fop-indented.pdf diff --git a/src/Tests/FopTests.VerifyFopRenderedPdf#pdf.verified.pdf b/src/Tests/FopTests.VerifyFopRenderedPdf#pdf.verified.pdf new file mode 100644 index 0000000000000000000000000000000000000000..604850e3110dbda241af1ee7a68e29563b44f145 GIT binary patch literal 5282 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 literal 0 HcmV?d00001 diff --git a/src/Tests/FopTests.VerifyFopRenderedPdf.verified.png b/src/Tests/FopTests.VerifyFopRenderedPdf.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6b6ed50eecb0b7ff9e8bd13f078fd35215d2b7 GIT binary patch literal 58737 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 literal 0 HcmV?d00001 diff --git a/src/Tests/FopTests.VerifyFopRenderedPdf.verified.txt b/src/Tests/FopTests.VerifyFopRenderedPdf.verified.txt new file mode 100644 index 0000000..99681b7 --- /dev/null +++ b/src/Tests/FopTests.VerifyFopRenderedPdf.verified.txt @@ -0,0 +1,11 @@ +{ + Version: 1.4, + PageCount: 1, + Pages: [ + { + Text: +Verify.DocNet +A deterministic PDF produced by Apache FOP for snapshot testing. + } + ] +} \ No newline at end of file diff --git a/src/Tests/PdfNormalizerTests.cs b/src/Tests/PdfNormalizerTests.cs index e440061..8523453 100644 --- a/src/Tests/PdfNormalizerTests.cs +++ b/src/Tests/PdfNormalizerTests.cs @@ -119,7 +119,7 @@ public async Task HandlesUnterminatedFileIdWithoutOverrunning() public async Task NormalizedDocumentStillLoads() { var data = File.ReadAllBytes("sample.pdf"); - PdfNormalizer.Normalize(data); + data = PdfNormalizer.Normalize(data); using var reader = DocLib.Instance.GetDocReader(data, new(scalingFactor: 2)); await Assert.That(reader.GetPageCount()).IsEqualTo(2); @@ -131,7 +131,7 @@ public async Task NeutralizesFopStyleXmp() // sample-fop.pdf carries an uncompressed FOP-style XMP packet whose dc:date render time is // nested in rdf:Seq/rdf:li. It must be neutralized while the document still loads. var data = File.ReadAllBytes("sample-fop.pdf"); - PdfNormalizer.Normalize(data); + data = PdfNormalizer.Normalize(data); var text = Encoding.Latin1.GetString(data); await Assert.That(text).Contains("0000-00-00T00:00:00+00:00"); @@ -141,14 +141,31 @@ public async Task NeutralizesFopStyleXmp() await Assert.That(reader.GetPageCount()).IsEqualTo(1); } + [Test] + public async Task CanonicalizesXmpAcrossJreSerializers() + { + // The same FOP document rendered on two machines. Apache FOP serializes the XMP packet through + // the platform's XML writer, so the JDK decides the indentation: one build emits a compact + // packet, the other indents every element, and the raw bytes differ. Once normalized, the pdf + // snapshot must collapse to identical bytes on both, and still load. + var compactRaw = File.ReadAllBytes("sample-fop-compact.pdf"); + var indentedRaw = File.ReadAllBytes("sample-fop-indented.pdf"); + await Assert.That(compactRaw.SequenceEqual(indentedRaw)).IsFalse(); + + var compact = PdfNormalizer.Normalize(compactRaw); + var indented = PdfNormalizer.Normalize(indentedRaw); + await Assert.That(compact).IsEquivalentTo(indented); + + using var reader = DocLib.Instance.GetDocReader(compact, new(scalingFactor: 2)); + await Assert.That(reader.GetPageCount()).IsEqualTo(1); + } + [Test] public async Task IsIdempotent() { // A second pass has nothing left to change: normalizing already-normalized bytes is a no-op. - var once = File.ReadAllBytes("sample.pdf"); - PdfNormalizer.Normalize(once); - var twice = (byte[])once.Clone(); - PdfNormalizer.Normalize(twice); + var once = PdfNormalizer.Normalize(File.ReadAllBytes("sample.pdf")); + var twice = PdfNormalizer.Normalize((byte[]) once.Clone()); await Assert.That(twice).IsEquivalentTo(once); } @@ -159,7 +176,7 @@ public async Task NormalizedSinglePageSplitStillLoads() // it must remain a valid one-page document. var data = File.ReadAllBytes("sample.pdf"); var split = DocLib.Instance.Split(data, 1, 1); - PdfNormalizer.Normalize(split); + split = PdfNormalizer.Normalize(split); using var reader = DocLib.Instance.GetDocReader(split, new(scalingFactor: 2)); await Assert.That(reader.GetPageCount()).IsEqualTo(1); @@ -168,7 +185,7 @@ public async Task NormalizedSinglePageSplitStillLoads() static string Normalize(string value) { var bytes = Encoding.Latin1.GetBytes(value); - PdfNormalizer.Normalize(bytes); + bytes = PdfNormalizer.Normalize(bytes); return Encoding.Latin1.GetString(bytes); } } diff --git a/src/Tests/Samples.VerifyPageDimensions#pdf.verified.pdf b/src/Tests/Samples.VerifyPageDimensions#pdf.verified.pdf index acb31ef9f63bfcf4f5b56361676954b599af4512..f2036d9327494a00a0881d5aa5195b600bb778f6 100644 GIT binary patch delta 113 zcmZ20I!|=NAyy_ci^)e=?I*LaMNN)pbDX@8ZQ*2Rc9+Q=?530Vv1?6!$!=h;C-f?V8ytO~1&+=ATHl0>`Bx||h^ N9Og#6s;aL3ZUCJsB@zGt delta 159 zcmbOyx>j_aG zo?U+OT6S)r)DCtnAo+;h5=csOm;%WF4nH6{k3)rt%VzRJ4$;XsIOKG=Z1js#(yUxk ti<65o3raHc^X#BPK`w3}W`z~d_}tWzL_4m{a-0>692Vxhs;aL3ZU7-}EeHSr diff --git a/src/Tests/Samples.VerifyPdf#pdf.verified.pdf b/src/Tests/Samples.VerifyPdf#pdf.verified.pdf index acb31ef9f63bfcf4f5b56361676954b599af4512..f2036d9327494a00a0881d5aa5195b600bb778f6 100644 GIT binary patch delta 113 zcmZ20I!|=NAyy_ci^)e=?I*LaMNN)pbDX@8ZQ*2Rc9+Q=?530Vv1?6!$!=h;C-f?V8ytO~1&+=ATHl0>`Bx||h^ N9Og#6s;aL3ZUCJsB@zGt delta 159 zcmbOyx>j_aG zo?U+OT6S)r)DCtnAo+;h5=csOm;%WF4nH6{k3)rt%VzRJ4$;XsIOKG=Z1js#(yUxk ti<65o3raHc^X#BPK`w3}W`z~d_}tWzL_4m{a-0>692Vxhs;aL3ZU7-}EeHSr diff --git a/src/Tests/Samples.VerifyPdfStream#pdf.verified.pdf b/src/Tests/Samples.VerifyPdfStream#pdf.verified.pdf index acb31ef9f63bfcf4f5b56361676954b599af4512..f2036d9327494a00a0881d5aa5195b600bb778f6 100644 GIT binary patch delta 113 zcmZ20I!|=NAyy_ci^)e=?I*LaMNN)pbDX@8ZQ*2Rc9+Q=?530Vv1?6!$!=h;C-f?V8ytO~1&+=ATHl0>`Bx||h^ N9Og#6s;aL3ZUCJsB@zGt delta 159 zcmbOyx>j_aG zo?U+OT6S)r)DCtnAo+;h5=csOm;%WF4nH6{k3)rt%VzRJ4$;XsIOKG=Z1js#(yUxk ti<65o3raHc^X#BPK`w3}W`z~d_}tWzL_4m{a-0>692Vxhs;aL3ZU7-}EeHSr diff --git a/src/Tests/Samples.VerifyPreserveTransparency#pdf.verified.pdf b/src/Tests/Samples.VerifyPreserveTransparency#pdf.verified.pdf index acb31ef9f63bfcf4f5b56361676954b599af4512..f2036d9327494a00a0881d5aa5195b600bb778f6 100644 GIT binary patch delta 113 zcmZ20I!|=NAyy_ci^)e=?I*LaMNN)pbDX@8ZQ*2Rc9+Q=?530Vv1?6!$!=h;C-f?V8ytO~1&+=ATHl0>`Bx||h^ N9Og#6s;aL3ZUCJsB@zGt delta 159 zcmbOyx>j_aG zo?U+OT6S)r)DCtnAo+;h5=csOm;%WF4nH6{k3)rt%VzRJ4$;XsIOKG=Z1js#(yUxk ti<65o3raHc^X#BPK`w3}W`z~d_}tWzL_4m{a-0>692Vxhs;aL3ZU7-}EeHSr diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj index 58a5126..4a3a26d 100644 --- a/src/Tests/Tests.csproj +++ b/src/Tests/Tests.csproj @@ -21,7 +21,7 @@ PreserveNewest - + PreserveNewest diff --git a/src/Tests/sample-fop-compact.pdf b/src/Tests/sample-fop-compact.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0505c72783173e5ad3fb5ba7f5590491f1881883 GIT binary patch literal 5318 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 literal 0 HcmV?d00001 diff --git a/src/Tests/sample-fop-indented.pdf b/src/Tests/sample-fop-indented.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a03dcbf175a3ac7acac81143fbff4b7ba6673c79 GIT binary patch literal 5453 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 /// -/// All edits are performed directly on the bytes and are length-preserving: only the mutable -/// characters inside each value are overwritten, so every cross-reference offset stays valid and -/// the file never has to be re-serialized. The scan is plaintext, so a value that has been -/// compressed away (inside an /ObjStm object stream or a flate-compressed XMP packet) no -/// longer appears literally and is therefore left as-is. +/// Neutralizing the values (dates and identifiers) is done in place and is length-preserving: only the +/// mutable characters inside each value are overwritten, so every cross-reference offset stays valid. A +/// value that has been compressed away (inside an /ObjStm object stream or a flate-compressed XMP +/// packet) no longer appears literally and is therefore left as-is. +/// +/// The XMP packet is then canonicalized. Apache FOP serializes it through the platform's XML writer, so +/// the same document is indented differently depending on which JRE produced it; once the values are +/// zeroed, that whitespace is the only remaining cross-platform difference. It is collapsed to a single +/// canonical form. Because that changes the packet length, the metadata stream length and the classic +/// cross-reference table are repaired afterwards, which is why the method returns the resulting buffer. +/// A document that cannot be safely rewritten this way (a cross-reference stream, an incremental update, +/// or an unlocatable stream length) is returned unchanged. +/// /// /// Targets unencrypted documents. Encrypted PDFs seed their encryption key from the trailer /// /ID; zeroing it would leave the document undecryptable, so encrypted input should not be @@ -29,7 +37,7 @@ enum Fill All } - public static void Normalize(byte[] data) + public static byte[] Normalize(byte[] data) { // Document information dictionary dates. ZeroPdfString(data, "/CreationDate"u8, Fill.Digits); @@ -52,6 +60,11 @@ public static void Normalize(byte[] data) ZeroXmpElement(data, " static bool IsWhitespace(byte b) => b is (byte) ' ' or (byte) '\t' or (byte) '\r' or (byte) '\n' or (byte) '\f' or 0; + + // Collapses the whitespace of the single XMP metadata packet to a canonical form and repairs the + // classic cross-reference table so the offsets stay valid. Returns the original array untouched when + // there is nothing to canonicalize, or when the document is not a shape this can safely rewrite: no + // packet, more than one packet, a cross-reference stream, more than one cross-reference section, or a + // metadata stream whose length cannot be located. + static byte[] CanonicalizeXmp(byte[] data) + { + var packetStart = IndexOf(data, "= 0) + { + return data; + } + + var endTag = IndexOf(data, ""u8, endTag); + if (closeMarker < 0) + { + return data; + } + + // The stream content runs from the packet up to endstream. The bytes between the packet's closing + // marker and endstream are a platform-dependent end-of-line (Apache FOP emits it with the JRE's + // line separator and counts it in the stream length), so they are folded into the region and + // normalized too. They must be whitespace for the whole content region to be replaced wholesale. + var packetEnd = closeMarker + 2; + var contentEnd = IndexOf(data, "endstream"u8, packetEnd); + if (contentEnd < 0 || !IsAllWhitespace(data, packetEnd, contentEnd)) + { + return data; + } + + // Canonical content: the packet with its inter-element whitespace collapsed, then a single + // normalized end-of-line before endstream. + var collapsed = CollapseInterTagWhitespace(data, packetStart, packetEnd); + var canonical = new byte[collapsed.Length + 1]; + Array.Copy(collapsed, canonical, collapsed.Length); + canonical[collapsed.Length] = (byte) '\n'; + + if (canonical.Length == contentEnd - packetStart) + { + // Already canonical: leave the bytes (and the cross-reference table) untouched. This keeps + // the pass idempotent and avoids rewriting documents that do not need it. + return data; + } + + if (!TryReadClassicXref(data, out var xrefKeyword, out var entries, out var startxref)) + { + return data; + } + + if (!TryFindStreamLength(data, packetStart, out var lengthField)) + { + return data; + } + + var packetEdit = (start: packetStart, end: contentEnd, replacement: canonical); + var lengthEdit = (start: lengthField.start, end: lengthField.end, replacement: AsciiDigits(canonical.Length)); + + var shiftPacket = packetEdit.replacement.Length - (packetEdit.end - packetEdit.start); + var shiftLength = lengthEdit.replacement.Length - (lengthEdit.end - lengthEdit.start); + + // Maps an original byte position (never inside an edited region) to its position after both the + // packet and length edits are applied. + int Shift(int position) => + position + + (position >= packetEdit.end ? shiftPacket : 0) + + (position >= lengthEdit.end ? shiftLength : 0); + + // startxref points at the cross-reference keyword, which trails both edits, so it is repointed to + // the shifted position. This third edit sits after the table and so does not move it. + var startxrefEdit = (start: startxref.start, end: startxref.end, replacement: AsciiDigits(Shift(xrefKeyword))); + + var edits = new List<(int start, int end, byte[] replacement)> {packetEdit, lengthEdit, startxrefEdit}; + edits.Sort((left, right) => left.start.CompareTo(right.start)); + var rebuilt = ApplyEdits(data, edits); + + // Repair each in-use entry with the shifted offset of its object. The entry field and the object + // it points at are both original positions, mapped through the same shift. + foreach (var entry in entries) + { + if (entry.inUse) + { + WriteOffset(rebuilt, Shift(entry.fieldOffset), Shift(entry.objectOffset)); + } + } + + return rebuilt; + } + + // Drops every run of whitespace that sits between a '>' and a '<' (ignorable inter-element whitespace + // and packet padding). Whitespace inside text content or attribute values is preserved. + static byte[] CollapseInterTagWhitespace(byte[] data, int start, int end) + { + var output = new List(end - start); + var index = start; + while (index < end) + { + var current = data[index]; + if (IsWhitespace(current) && output.Count > 0 && output[^1] == (byte) '>') + { + var runEnd = index; + while (runEnd < end && IsWhitespace(data[runEnd])) + { + runEnd++; + } + + if (runEnd < end && data[runEnd] == (byte) '<') + { + index = runEnd; + continue; + } + } + + output.Add(current); + index++; + } + + return output.ToArray(); + } + + // Reads the sole classic cross-reference table: the keyword position, every entry (the object offset + // it records and where that offset field lives), and the digit span of the sole startxref value. + // Returns false for anything else (a cross-reference stream, an incremental update, or a malformed + // table) so the caller can leave the document untouched. + static bool TryReadClassicXref( + byte[] data, + out int xrefKeyword, + out List<(int objectOffset, int fieldOffset, bool inUse)> entries, + out (int start, int end) startxref) + { + xrefKeyword = -1; + entries = []; + startxref = default; + + // A second startxref implies an incremental update, which this does not rewrite. + var startxrefKeyword = IndexOf(data, "startxref"u8, 0); + if (startxrefKeyword < 0 || + IndexOf(data, "startxref"u8, startxrefKeyword + 1) >= 0) + { + return false; + } + + if (!TryFindXrefTable(data, out xrefKeyword)) + { + return false; + } + + var position = SkipEol(data, xrefKeyword + 4); + + // Cross-reference subsections until the trailer keyword. + while (true) + { + position = SkipWhitespace(data, position); + if (StartsWith(data, position, "trailer"u8)) + { + break; + } + + // A subsection header is two integers ("first count") separated by a space. + if (!TryReadInt(data, ref position, out _)) + { + return false; + } + + position = SkipWhitespace(data, position); + if (!TryReadInt(data, ref position, out var count)) + { + return false; + } + + position = SkipEol(data, position); + for (var index = 0; index < count; index++) + { + // A cross-reference entry is exactly 20 bytes: a 10-digit offset, a space, a 5-digit + // generation, a space, the in-use/free type byte, and a two-byte end-of-line. + if (position + 20 > data.Length) + { + return false; + } + + var offset = ParseFixedInt(data, position, 10); + var type = data[position + 17]; + entries.Add((offset, position, type == (byte) 'n')); + position += 20; + } + } + + var digits = SkipWhitespace(data, startxrefKeyword + "startxref"u8.Length); + var digitsEnd = digits; + while (digitsEnd < data.Length && IsDigit(data[digitsEnd])) + { + digitsEnd++; + } + + if (digitsEnd == digits) + { + return false; + } + + startxref = (digits, digitsEnd); + return true; + } + + // Finds the cross-reference table keyword: an "xref" that begins a line (which excludes the "xref" + // inside "startxref"). Fails when there is not exactly one, so cross-reference streams and + // incremental updates are rejected. + static bool TryFindXrefTable(byte[] data, out int position) + { + position = -1; + var search = 0; + while (true) + { + var hit = IndexOf(data, "xref"u8, search); + if (hit < 0) + { + return position >= 0; + } + + search = hit + 4; + if (hit == 0 || data[hit - 1] != (byte) '\r' && data[hit - 1] != (byte) '\n') + { + continue; + } + + if (position >= 0) + { + position = -1; + return false; + } + + position = hit; + } + } + + // Locates the metadata stream length value, either the direct "/Length n" in the dictionary or, for + // the indirect "/Length g 0 R" form, the numeric value of object g. + static bool TryFindStreamLength(byte[] data, int packetStart, out (int start, int end) lengthField) + { + lengthField = default; + + // The metadata dictionary sits immediately before the packet, so its /Length is the nearest one. + var key = LastIndexOf(data, "/Length"u8, packetStart); + if (key < 0) + { + return false; + } + + var digitsStart = SkipWhitespace(data, key + "/Length"u8.Length); + var cursor = digitsStart; + if (!TryReadInt(data, ref cursor, out var first)) + { + return false; + } + + // Indirect form "/Length g 0 R": the value lives in object g. + var probe = SkipWhitespace(data, cursor); + if (TryReadInt(data, ref probe, out var generation)) + { + probe = SkipWhitespace(data, probe); + if (probe < data.Length && data[probe] == (byte) 'R') + { + return TryFindIndirectLength(data, first, generation, out lengthField); + } + } + + // Direct form "/Length n". + lengthField = (digitsStart, cursor); + return true; + } + + // Finds "objectNumber generation obj" at the start of a line and returns the span of the integer that + // follows (the stream length held in an indirect object). + static bool TryFindIndirectLength(byte[] data, int objectNumber, int generation, out (int start, int end) lengthField) + { + lengthField = default; + + var header = AsciiBytes($"{objectNumber} {generation} obj"); + var search = 0; + while (true) + { + var hit = IndexOf(data, header, search); + if (hit < 0) + { + return false; + } + + search = hit + header.Length; + if (hit != 0 && data[hit - 1] != (byte) '\r' && data[hit - 1] != (byte) '\n') + { + continue; + } + + var digitsStart = SkipWhitespace(data, hit + header.Length); + var cursor = digitsStart; + if (!TryReadInt(data, ref cursor, out _)) + { + return false; + } + + lengthField = (digitsStart, cursor); + return true; + } + } + + // Builds a new buffer with each edit (sorted, non-overlapping) spliced in. + static byte[] ApplyEdits(byte[] data, List<(int start, int end, byte[] replacement)> edits) + { + var length = data.Length; + foreach (var edit in edits) + { + length += edit.replacement.Length - (edit.end - edit.start); + } + + var output = new byte[length]; + var read = 0; + var write = 0; + foreach (var edit in edits) + { + var copy = edit.start - read; + Array.Copy(data, read, output, write, copy); + write += copy; + Array.Copy(edit.replacement, 0, output, write, edit.replacement.Length); + write += edit.replacement.Length; + read = edit.end; + } + + Array.Copy(data, read, output, write, data.Length - read); + return output; + } + + // Overwrites a cross-reference entry's fixed 10-digit, zero-padded offset field. + static void WriteOffset(byte[] data, int position, int offset) + { + for (var index = 9; index >= 0; index--) + { + data[position + index] = (byte) ('0' + offset % 10); + offset /= 10; + } + } + + static int IndexOf(byte[] data, ReadOnlySpan value, int start) + { + var hit = data.AsSpan(start).IndexOf(value); + return hit < 0 ? -1 : hit + start; + } + + static int LastIndexOf(byte[] data, ReadOnlySpan value, int end) => + data.AsSpan(0, end).LastIndexOf(value); + + static bool StartsWith(byte[] data, int position, ReadOnlySpan value) => + position + value.Length <= data.Length && + data.AsSpan(position, value.Length).SequenceEqual(value); + + static bool IsAllWhitespace(byte[] data, int start, int end) + { + for (var index = start; index < end; index++) + { + if (!IsWhitespace(data[index])) + { + return false; + } + } + + return true; + } + + static int SkipEol(byte[] data, int position) + { + if (position < data.Length && data[position] == (byte) '\r') + { + position++; + } + + if (position < data.Length && data[position] == (byte) '\n') + { + position++; + } + + return position; + } + + static bool TryReadInt(byte[] data, ref int position, out int value) + { + value = 0; + var start = position; + while (position < data.Length && IsDigit(data[position])) + { + value = value * 10 + (data[position] - '0'); + position++; + } + + return position > start; + } + + static int ParseFixedInt(byte[] data, int position, int width) + { + var value = 0; + for (var index = 0; index < width; index++) + { + value = value * 10 + (data[position + index] - '0'); + } + + return value; + } + + static byte[] AsciiDigits(int value) + { + if (value == 0) + { + return [(byte) '0']; + } + + var length = 0; + for (var remaining = value; remaining > 0; remaining /= 10) + { + length++; + } + + var bytes = new byte[length]; + for (var index = length - 1; index >= 0; index--) + { + bytes[index] = (byte) ('0' + value % 10); + value /= 10; + } + + return bytes; + } + + static byte[] AsciiBytes(string value) + { + var bytes = new byte[value.Length]; + for (var index = 0; index < value.Length; index++) + { + bytes[index] = (byte) value[index]; + } + + return bytes; + } } diff --git a/src/Verify.DocNet/VerifyDocNet_Pdf.cs b/src/Verify.DocNet/VerifyDocNet_Pdf.cs index 2c376bf..e457bee 100644 --- a/src/Verify.DocNet/VerifyDocNet_Pdf.cs +++ b/src/Verify.DocNet/VerifyDocNet_Pdf.cs @@ -27,7 +27,7 @@ static ConversionResult Convert(string? name, Stream stream, IReadOnlyDictionary // Neutralize the volatile fields for the pdf snapshot. When the whole document is reused // this must happen only after the reader, which reads lazily from the same buffer, has been // released. - PdfNormalizer.Normalize(pdfBytes); + pdfBytes = PdfNormalizer.Normalize(pdfBytes); targets.Add( new("pdf", new MemoryStream(pdfBytes), "pdf") { From 406489cb9e1ef8c42dc3c8a91d85167b6515bea1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 21 Jul 2026 21:02:35 +1000 Subject: [PATCH 2/5] refs --- .editorconfig | 4 ++++ src/Directory.Packages.props | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.editorconfig b/.editorconfig index 0e6515c..ae4e568 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,6 +9,9 @@ insert_final_newline = true indent_size = 4 charset = utf-8 +# Convention (not tool-enforced): line comments go on their own line directly above the code they +# describe, never trailing at the end of a code line. + # Redundant accessor body resharper_redundant_accessor_body_highlighting = error @@ -232,6 +235,7 @@ resharper_arrange_redundant_parentheses_highlighting = error resharper_arrange_static_member_qualifier_highlighting = error resharper_arrange_this_qualifier_highlighting = error resharper_arrange_type_member_modifiers_highlighting = none +resharper_arrange_type_modifiers_highlighting = none resharper_built_in_type_reference_style_for_member_access_highlighting = hint resharper_built_in_type_reference_style_highlighting = hint resharper_check_namespace_highlighting = none diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index ca23c0b..0ad30ea 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -8,14 +8,14 @@ - - - + + + - + - + From 1fed765bdaa56191656c7a7e15675a3355650d69 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 21 Jul 2026 22:18:21 +1000 Subject: [PATCH 3/5] refs or cleanup --- src/Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 0ad30ea..23a692b 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -10,9 +10,9 @@ - + - + From 64ccdcc59e4a81b6abe53d32ea9820adb6bdcab3 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 23 Jul 2026 00:10:58 +1000 Subject: [PATCH 4/5] Use the DeterministicPdf package instead of the local PdfNormalizer This is where the normalizer originated. It has since been extracted to the DeterministicPdf package and adopted by the other pdf producing repos, so the local copy is now the duplicate. The algorithm is unchanged, which the unchanged pdf snapshots confirm. The package additionally takes a defensive copy, so the caller keeps ownership of the array it passed. The tests that cover the algorithm itself now live in the package. The ones kept here are the pdfium specific wiring: that a normalized document, a FOP produced document, and a pdfium re-split page subset all still load. --- src/Directory.Build.props | 2 +- src/Directory.Packages.props | 1 + src/Tests/GlobalUsings.cs | 3 +- src/Tests/PdfNormalizerTests.cs | 146 +---- src/Verify.DocNet/GlobalUsings.cs | 3 +- src/Verify.DocNet/PdfNormalizer.cs | 812 ------------------------- src/Verify.DocNet/Verify.DocNet.csproj | 1 + 7 files changed, 15 insertions(+), 953 deletions(-) delete mode 100644 src/Verify.DocNet/PdfNormalizer.cs diff --git a/src/Directory.Build.props b/src/Directory.Build.props index c9eea03..7c522be 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;NU1608;NU1109 - 3.3.2 + 3.4.0 1.0.0 preview false diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 23a692b..d95d2e1 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,6 +4,7 @@ true + diff --git a/src/Tests/GlobalUsings.cs b/src/Tests/GlobalUsings.cs index 1eb3bfd..68c1a56 100644 --- a/src/Tests/GlobalUsings.cs +++ b/src/Tests/GlobalUsings.cs @@ -1,4 +1,5 @@ -global using System.Buffers.Binary; +global using DeterministicPdf; +global using System.Buffers.Binary; global using System.Diagnostics; global using System.IO.Compression; global using Docnet.Core; diff --git a/src/Tests/PdfNormalizerTests.cs b/src/Tests/PdfNormalizerTests.cs index 8523453..cfaafed 100644 --- a/src/Tests/PdfNormalizerTests.cs +++ b/src/Tests/PdfNormalizerTests.cs @@ -1,125 +1,12 @@ +// The neutralizing algorithm itself is owned and tested by the DeterministicPdf package. What is +// worth asserting here is the wiring: that this package applies it, and that a normalized document +// is still loadable by pdfium. public class PdfNormalizerTests { - [Test] - public async Task NeutralizesVolatileValues() - { - var input = - "/ID [ <1122334455667788>] " + - "/CreationDate(D:20240115093000+05'30') " + - "/ModDate(D:20240115093000Z) " + - "2024-01-15T09:30:00+05:30" + - "2024-01-15T09:30:00Z" + - "2024-01-15T09:30:00Z" + - "uuid:0f7b2c9a-1234-5678-9abc-def012345678" + - "xmp.iid:1a2b3c4d"; - var expected = - "/ID [<0000000000000000> <0000000000000000>] " + - "/CreationDate(D:00000000000000+00'00') " + - "/ModDate(D:00000000000000Z) " + - "0000-00-00T00:00:00+00:00" + - "0000-00-00T00:00:00Z" + - "0000-00-00T00:00:00Z" + - $"{new string('0', 41)}" + - $"{new string('0', 16)}"; - await Assert.That(Normalize(input)).IsEqualTo(expected); - } - - [Test] - public async Task NeutralizesDublinCoreDate() - { - // Some producers (for example older Apache FOP) write the render time straight into the - // Dublin Core element as simple text content. - var input = "2024-01-15T09:30:00+05:30"; - var expected = "0000-00-00T00:00:00+00:00"; - await Assert.That(Normalize(input)).IsEqualTo(expected); - } - - [Test] - public async Task NeutralizesDublinCoreDateSeq() - { - // Per the XMP spec dc:date is an ordered array (seq Date), so a spec-compliant producer - // (current Apache FOP) nests the render time in rdf:Seq/rdf:li rather than as direct text. - var input = "2024-01-15T09:30:00+05:30"; - var expected = "0000-00-00T00:00:00+00:00"; - await Assert.That(Normalize(input)).IsEqualTo(expected); - } - - [Test] - public async Task NeutralizesDublinCoreDateSeqWithWhitespaceAndMultipleEntries() - { - // Pretty-printed with indentation and more than one date in the sequence: markup and - // whitespace are preserved while every date value is zeroed. - var input = - """ - - - 2024-01-15T09:30:00+05:30 - 2019-12-31T23:59:59Z - - - """; - var expected = - """ - - - 0000-00-00T00:00:00+00:00 - 0000-00-00T00:00:00Z - - - """; - await Assert.That(Normalize(input)).IsEqualTo(expected); - } - - [Test] - public async Task LeavesNonDateRdfArraysUntouched() - { - // The rdf:li descent is scoped to dc:date, so digits in a sibling array (here dc:subject) - // must survive. - var input = - "topic 2024" + - "2024-01-15T09:30:00Z"; - var expected = - "topic 2024" + - "0000-00-00T00:00:00Z"; - await Assert.That(Normalize(input)).IsEqualTo(expected); - } - - [Test] - public async Task CollapsesDifferingValuesToTheSameOutput() - { - // The same producer emits a stable structure across runs, so two documents differing only - // in the volatile digits/hex normalize to identical bytes. - var a = "/ID [] /CreationDate(D:20240115093000+05'30')"; - var b = "/ID [<99887766>] /CreationDate(D:19991231235959+11'45')"; - await Assert.That(a).IsNotEqualTo(b); - await Assert.That(Normalize(a)).IsEqualTo(Normalize(b)); - } - - [Test] - public async Task LeavesLookalikeKeysUntouched() - { - // /IDTree is a name-tree key (not the file identifier), /ModDateStamp is a different name, - // and a self-closing date element has no content: none should be altered. - var input = "/IDTree [1 2] /ModDateStamp(20240101) 2024"; - await Assert.That(Normalize(input)).IsEqualTo(input); - } - - [Test] - public async Task HandlesUnterminatedFileIdWithoutOverrunning() - { - // A truncated /ID whose string runs to the end of the buffer with no closing '>'/')' (and no - // closing ']') must not scan past the buffer: the value is zeroed as far as it exists and the - // scan stops cleanly rather than throwing. Hex string form (no closing '>'): - await Assert.That(Normalize("/ID [0000-00-00T00:00:00+00:00"); @@ -148,8 +34,8 @@ public async Task CanonicalizesXmpAcrossJreSerializers() // the platform's XML writer, so the JDK decides the indentation: one build emits a compact // packet, the other indents every element, and the raw bytes differ. Once normalized, the pdf // snapshot must collapse to identical bytes on both, and still load. - var compactRaw = File.ReadAllBytes("sample-fop-compact.pdf"); - var indentedRaw = File.ReadAllBytes("sample-fop-indented.pdf"); + var compactRaw = await File.ReadAllBytesAsync("sample-fop-compact.pdf"); + var indentedRaw = await File.ReadAllBytesAsync("sample-fop-indented.pdf"); await Assert.That(compactRaw.SequenceEqual(indentedRaw)).IsFalse(); var compact = PdfNormalizer.Normalize(compactRaw); @@ -160,32 +46,16 @@ public async Task CanonicalizesXmpAcrossJreSerializers() await Assert.That(reader.GetPageCount()).IsEqualTo(1); } - [Test] - public async Task IsIdempotent() - { - // A second pass has nothing left to change: normalizing already-normalized bytes is a no-op. - var once = PdfNormalizer.Normalize(File.ReadAllBytes("sample.pdf")); - var twice = PdfNormalizer.Normalize((byte[]) once.Clone()); - await Assert.That(twice).IsEquivalentTo(once); - } - [Test] public async Task NormalizedSinglePageSplitStillLoads() { // A page subset is re-serialized by pdfium (reintroducing volatile fields) then normalized; // it must remain a valid one-page document. - var data = File.ReadAllBytes("sample.pdf"); + var data = await File.ReadAllBytesAsync("sample.pdf"); var split = DocLib.Instance.Split(data, 1, 1); split = PdfNormalizer.Normalize(split); using var reader = DocLib.Instance.GetDocReader(split, new(scalingFactor: 2)); await Assert.That(reader.GetPageCount()).IsEqualTo(1); } - - static string Normalize(string value) - { - var bytes = Encoding.Latin1.GetBytes(value); - bytes = PdfNormalizer.Normalize(bytes); - return Encoding.Latin1.GetString(bytes); - } } diff --git a/src/Verify.DocNet/GlobalUsings.cs b/src/Verify.DocNet/GlobalUsings.cs index f21bb70..a1403df 100644 --- a/src/Verify.DocNet/GlobalUsings.cs +++ b/src/Verify.DocNet/GlobalUsings.cs @@ -1,4 +1,5 @@ -global using System.Buffers.Binary; +global using DeterministicPdf; +global using System.Buffers.Binary; global using System.IO.Compression; global using System.IO.Hashing; global using Docnet.Core; diff --git a/src/Verify.DocNet/PdfNormalizer.cs b/src/Verify.DocNet/PdfNormalizer.cs deleted file mode 100644 index 36c072a..0000000 --- a/src/Verify.DocNet/PdfNormalizer.cs +++ /dev/null @@ -1,812 +0,0 @@ -/// -/// Neutralizes the non-deterministic fields of a PDF (the trailer /ID, the document -/// information /CreationDate and /ModDate, and the equivalent XMP metadata dates and -/// identifiers) so that the same source document always produces byte-identical snapshot output. -/// -/// -/// Neutralizing the values (dates and identifiers) is done in place and is length-preserving: only the -/// mutable characters inside each value are overwritten, so every cross-reference offset stays valid. A -/// value that has been compressed away (inside an /ObjStm object stream or a flate-compressed XMP -/// packet) no longer appears literally and is therefore left as-is. -/// -/// The XMP packet is then canonicalized. Apache FOP serializes it through the platform's XML writer, so -/// the same document is indented differently depending on which JRE produced it; once the values are -/// zeroed, that whitespace is the only remaining cross-platform difference. It is collapsed to a single -/// canonical form. Because that changes the packet length, the metadata stream length and the classic -/// cross-reference table are repaired afterwards, which is why the method returns the resulting buffer. -/// A document that cannot be safely rewritten this way (a cross-reference stream, an incremental update, -/// or an unlocatable stream length) is returned unchanged. -/// -/// -/// Targets unencrypted documents. Encrypted PDFs seed their encryption key from the trailer -/// /ID; zeroing it would leave the document undecryptable, so encrypted input should not be -/// passed here. -/// -/// -static class PdfNormalizer -{ - enum Fill - { - // Zero the ASCII digits only, keeping separators (leaves a readable date). - Digits, - - // Zero the hexadecimal digits (for hex string <...> values). - Hex, - - // Zero every non-whitespace byte (for opaque identifiers). - All - } - - public static byte[] Normalize(byte[] data) - { - // Document information dictionary dates. - ZeroPdfString(data, "/CreationDate"u8, Fill.Digits); - ZeroPdfString(data, "/ModDate"u8, Fill.Digits); - - // Trailer / cross-reference-stream file identifier: /ID [<...> <...>]. - ZeroFileId(data); - - // XMP metadata dates (uncompressed metadata streams only). - ZeroXmpElement(data, ""u8, Fill.Digits); - - // XMP per-generation identifiers. - ZeroXmpElement(data, "". - static void ZeroPdfString(byte[] data, ReadOnlySpan key, Fill fill) - { - var pos = 0; - while (true) - { - var hit = data.AsSpan(pos).IndexOf(key); - if (hit < 0) - { - return; - } - - var i = pos + hit + key.Length; - pos = i; - - i = SkipWhitespace(data, i); - if (i >= data.Length) - { - return; - } - - if (data[i] == (byte) '(') - { - var start = i + 1; - var end = FindLiteralEnd(data, start); - Overwrite(data, start, end, fill); - pos = end; - } - else if (data[i] == (byte) '<' && (i + 1 >= data.Length || data[i + 1] != (byte) '<')) - { - var start = i + 1; - var end = FindByte(data, start, (byte) '>'); - Overwrite(data, start, end, Fill.Hex); - pos = end; - } - } - } - - // Finds "/ID" followed by an array and zeroes each string element. Anything not shaped like the - // identifier array (for example the "/IDTree" name-tree key) is skipped. - static void ZeroFileId(byte[] data) - { - var key = "/ID"u8; - var pos = 0; - while (true) - { - var hit = data.AsSpan(pos).IndexOf(key); - if (hit < 0) - { - return; - } - - var i = pos + hit + key.Length; - pos = i; - - i = SkipWhitespace(data, i); - if (i >= data.Length || data[i] != (byte) '[') - { - continue; - } - - i++; - while (i < data.Length && data[i] != (byte) ']') - { - if (data[i] == (byte) '<') - { - var start = i + 1; - i = FindByte(data, start, (byte) '>'); - Overwrite(data, start, i, Fill.Hex); - if (i < data.Length) - { - i++; - } - } - else if (data[i] == (byte) '(') - { - var start = i + 1; - i = FindLiteralEnd(data, start); - Overwrite(data, start, i, Fill.All); - if (i < data.Length) - { - i++; - } - } - else - { - i++; - } - } - - pos = i; - } - } - - // Finds an XMP element by its opening tag and zeroes the text content up to the next '<'. - static void ZeroXmpElement(byte[] data, ReadOnlySpan openTag, Fill fill) - { - var pos = 0; - while (true) - { - var start = NextXmpElementContent(data, openTag, ref pos); - if (start < 0) - { - return; - } - - var end = FindByte(data, start, (byte) '<'); - Overwrite(data, start, end, fill); - pos = end; - } - } - - // Like ZeroXmpElement, but descends through child markup and zeroes the content of every text - // node up to the matching close tag. XMP array properties (for example dc:date, a "seq Date") - // wrap their value in an rdf:Seq/rdf:li list, so the volatile value is not direct text content of - // the named element and ZeroXmpElement alone would step over it. - static void ZeroXmpElementTree(byte[] data, ReadOnlySpan openTag, ReadOnlySpan closeTag, Fill fill) - { - var pos = 0; - while (true) - { - var start = NextXmpElementContent(data, openTag, ref pos); - if (start < 0) - { - return; - } - - var closeHit = data.AsSpan(start).IndexOf(closeTag); - if (closeHit < 0) - { - return; - } - - var end = start + closeHit; - var i = start; - while (i < end) - { - // Skip markup so only text nodes are altered, never element or attribute names. - if (data[i] == (byte) '<') - { - i = FindByte(data, i, (byte) '>'); - if (i < end) - { - i++; - } - - continue; - } - - var textEnd = FindByte(data, i, (byte) '<'); - Overwrite(data, i, textEnd, fill); - i = textEnd; - } - - pos = end; - } - } - - // Locates the next element whose opening tag is 'openTag', returning the index of its content - // (the byte after '>'), or -1 when no further match exists. A longer look-alike name or a - // self-closing tag is skipped internally. 'pos' is advanced past the opening tag so scanning can - // resume from the returned index. - static int NextXmpElementContent(byte[] data, ReadOnlySpan openTag, ref int pos) - { - while (true) - { - var hit = data.AsSpan(pos).IndexOf(openTag); - if (hit < 0) - { - return -1; - } - - var i = pos + hit + openTag.Length; - pos = i; - - // Reject a longer element name that merely shares this prefix. - if (i < data.Length && data[i] != (byte) '>' && data[i] != (byte) '/' && !IsWhitespace(data[i])) - { - continue; - } - - // Skip the remainder of the opening tag, remembering the last significant byte so a - // self-closing "" can be detected. - var lastSignificant = (byte) 0; - while (i < data.Length && data[i] != (byte) '>') - { - if (!IsWhitespace(data[i])) - { - lastSignificant = data[i]; - } - - i++; - } - - if (i >= data.Length) - { - return -1; - } - - i++; - pos = i; - if (lastSignificant == (byte) '/') - { - continue; - } - - return i; - } - } - - static void Overwrite(byte[] data, int start, int end, Fill fill) - { - for (var i = start; i < end; i++) - { - var c = data[i]; - var replace = fill switch - { - Fill.Digits => IsDigit(c), - Fill.Hex => IsHexDigit(c), - _ => !IsWhitespace(c) - }; - if (replace) - { - data[i] = (byte) '0'; - } - } - } - - // Returns the index of the ')' that closes the literal string starting at 'start', honoring - // backslash escapes and balanced parentheses, or the end of the buffer if unterminated. - static int FindLiteralEnd(byte[] data, int start) - { - var depth = 1; - var i = start; - while (i < data.Length) - { - var c = data[i]; - if (c == (byte) '\\') - { - i += 2; - continue; - } - - if (c == (byte) '(') - { - depth++; - } - else if (c == (byte) ')') - { - depth--; - if (depth == 0) - { - return i; - } - } - - i++; - } - - return data.Length; - } - - static int FindByte(byte[] data, int start, byte target) - { - var i = start; - while (i < data.Length && data[i] != target) - { - i++; - } - - return i; - } - - static int SkipWhitespace(byte[] data, int i) - { - while (i < data.Length && IsWhitespace(data[i])) - { - i++; - } - - return i; - } - - static bool IsDigit(byte b) => - b is >= (byte) '0' and <= (byte) '9'; - - static bool IsHexDigit(byte b) => - b is >= (byte) '0' and <= (byte) '9' or >= (byte) 'a' and <= (byte) 'f' or >= (byte) 'A' and <= (byte) 'F'; - - static bool IsWhitespace(byte b) => - b is (byte) ' ' or (byte) '\t' or (byte) '\r' or (byte) '\n' or (byte) '\f' or 0; - - // Collapses the whitespace of the single XMP metadata packet to a canonical form and repairs the - // classic cross-reference table so the offsets stay valid. Returns the original array untouched when - // there is nothing to canonicalize, or when the document is not a shape this can safely rewrite: no - // packet, more than one packet, a cross-reference stream, more than one cross-reference section, or a - // metadata stream whose length cannot be located. - static byte[] CanonicalizeXmp(byte[] data) - { - var packetStart = IndexOf(data, "= 0) - { - return data; - } - - var endTag = IndexOf(data, ""u8, endTag); - if (closeMarker < 0) - { - return data; - } - - // The stream content runs from the packet up to endstream. The bytes between the packet's closing - // marker and endstream are a platform-dependent end-of-line (Apache FOP emits it with the JRE's - // line separator and counts it in the stream length), so they are folded into the region and - // normalized too. They must be whitespace for the whole content region to be replaced wholesale. - var packetEnd = closeMarker + 2; - var contentEnd = IndexOf(data, "endstream"u8, packetEnd); - if (contentEnd < 0 || !IsAllWhitespace(data, packetEnd, contentEnd)) - { - return data; - } - - // Canonical content: the packet with its inter-element whitespace collapsed, then a single - // normalized end-of-line before endstream. - var collapsed = CollapseInterTagWhitespace(data, packetStart, packetEnd); - var canonical = new byte[collapsed.Length + 1]; - Array.Copy(collapsed, canonical, collapsed.Length); - canonical[collapsed.Length] = (byte) '\n'; - - if (canonical.Length == contentEnd - packetStart) - { - // Already canonical: leave the bytes (and the cross-reference table) untouched. This keeps - // the pass idempotent and avoids rewriting documents that do not need it. - return data; - } - - if (!TryReadClassicXref(data, out var xrefKeyword, out var entries, out var startxref)) - { - return data; - } - - if (!TryFindStreamLength(data, packetStart, out var lengthField)) - { - return data; - } - - var packetEdit = (start: packetStart, end: contentEnd, replacement: canonical); - var lengthEdit = (start: lengthField.start, end: lengthField.end, replacement: AsciiDigits(canonical.Length)); - - var shiftPacket = packetEdit.replacement.Length - (packetEdit.end - packetEdit.start); - var shiftLength = lengthEdit.replacement.Length - (lengthEdit.end - lengthEdit.start); - - // Maps an original byte position (never inside an edited region) to its position after both the - // packet and length edits are applied. - int Shift(int position) => - position + - (position >= packetEdit.end ? shiftPacket : 0) + - (position >= lengthEdit.end ? shiftLength : 0); - - // startxref points at the cross-reference keyword, which trails both edits, so it is repointed to - // the shifted position. This third edit sits after the table and so does not move it. - var startxrefEdit = (start: startxref.start, end: startxref.end, replacement: AsciiDigits(Shift(xrefKeyword))); - - var edits = new List<(int start, int end, byte[] replacement)> {packetEdit, lengthEdit, startxrefEdit}; - edits.Sort((left, right) => left.start.CompareTo(right.start)); - var rebuilt = ApplyEdits(data, edits); - - // Repair each in-use entry with the shifted offset of its object. The entry field and the object - // it points at are both original positions, mapped through the same shift. - foreach (var entry in entries) - { - if (entry.inUse) - { - WriteOffset(rebuilt, Shift(entry.fieldOffset), Shift(entry.objectOffset)); - } - } - - return rebuilt; - } - - // Drops every run of whitespace that sits between a '>' and a '<' (ignorable inter-element whitespace - // and packet padding). Whitespace inside text content or attribute values is preserved. - static byte[] CollapseInterTagWhitespace(byte[] data, int start, int end) - { - var output = new List(end - start); - var index = start; - while (index < end) - { - var current = data[index]; - if (IsWhitespace(current) && output.Count > 0 && output[^1] == (byte) '>') - { - var runEnd = index; - while (runEnd < end && IsWhitespace(data[runEnd])) - { - runEnd++; - } - - if (runEnd < end && data[runEnd] == (byte) '<') - { - index = runEnd; - continue; - } - } - - output.Add(current); - index++; - } - - return output.ToArray(); - } - - // Reads the sole classic cross-reference table: the keyword position, every entry (the object offset - // it records and where that offset field lives), and the digit span of the sole startxref value. - // Returns false for anything else (a cross-reference stream, an incremental update, or a malformed - // table) so the caller can leave the document untouched. - static bool TryReadClassicXref( - byte[] data, - out int xrefKeyword, - out List<(int objectOffset, int fieldOffset, bool inUse)> entries, - out (int start, int end) startxref) - { - xrefKeyword = -1; - entries = []; - startxref = default; - - // A second startxref implies an incremental update, which this does not rewrite. - var startxrefKeyword = IndexOf(data, "startxref"u8, 0); - if (startxrefKeyword < 0 || - IndexOf(data, "startxref"u8, startxrefKeyword + 1) >= 0) - { - return false; - } - - if (!TryFindXrefTable(data, out xrefKeyword)) - { - return false; - } - - var position = SkipEol(data, xrefKeyword + 4); - - // Cross-reference subsections until the trailer keyword. - while (true) - { - position = SkipWhitespace(data, position); - if (StartsWith(data, position, "trailer"u8)) - { - break; - } - - // A subsection header is two integers ("first count") separated by a space. - if (!TryReadInt(data, ref position, out _)) - { - return false; - } - - position = SkipWhitespace(data, position); - if (!TryReadInt(data, ref position, out var count)) - { - return false; - } - - position = SkipEol(data, position); - for (var index = 0; index < count; index++) - { - // A cross-reference entry is exactly 20 bytes: a 10-digit offset, a space, a 5-digit - // generation, a space, the in-use/free type byte, and a two-byte end-of-line. - if (position + 20 > data.Length) - { - return false; - } - - var offset = ParseFixedInt(data, position, 10); - var type = data[position + 17]; - entries.Add((offset, position, type == (byte) 'n')); - position += 20; - } - } - - var digits = SkipWhitespace(data, startxrefKeyword + "startxref"u8.Length); - var digitsEnd = digits; - while (digitsEnd < data.Length && IsDigit(data[digitsEnd])) - { - digitsEnd++; - } - - if (digitsEnd == digits) - { - return false; - } - - startxref = (digits, digitsEnd); - return true; - } - - // Finds the cross-reference table keyword: an "xref" that begins a line (which excludes the "xref" - // inside "startxref"). Fails when there is not exactly one, so cross-reference streams and - // incremental updates are rejected. - static bool TryFindXrefTable(byte[] data, out int position) - { - position = -1; - var search = 0; - while (true) - { - var hit = IndexOf(data, "xref"u8, search); - if (hit < 0) - { - return position >= 0; - } - - search = hit + 4; - if (hit == 0 || data[hit - 1] != (byte) '\r' && data[hit - 1] != (byte) '\n') - { - continue; - } - - if (position >= 0) - { - position = -1; - return false; - } - - position = hit; - } - } - - // Locates the metadata stream length value, either the direct "/Length n" in the dictionary or, for - // the indirect "/Length g 0 R" form, the numeric value of object g. - static bool TryFindStreamLength(byte[] data, int packetStart, out (int start, int end) lengthField) - { - lengthField = default; - - // The metadata dictionary sits immediately before the packet, so its /Length is the nearest one. - var key = LastIndexOf(data, "/Length"u8, packetStart); - if (key < 0) - { - return false; - } - - var digitsStart = SkipWhitespace(data, key + "/Length"u8.Length); - var cursor = digitsStart; - if (!TryReadInt(data, ref cursor, out var first)) - { - return false; - } - - // Indirect form "/Length g 0 R": the value lives in object g. - var probe = SkipWhitespace(data, cursor); - if (TryReadInt(data, ref probe, out var generation)) - { - probe = SkipWhitespace(data, probe); - if (probe < data.Length && data[probe] == (byte) 'R') - { - return TryFindIndirectLength(data, first, generation, out lengthField); - } - } - - // Direct form "/Length n". - lengthField = (digitsStart, cursor); - return true; - } - - // Finds "objectNumber generation obj" at the start of a line and returns the span of the integer that - // follows (the stream length held in an indirect object). - static bool TryFindIndirectLength(byte[] data, int objectNumber, int generation, out (int start, int end) lengthField) - { - lengthField = default; - - var header = AsciiBytes($"{objectNumber} {generation} obj"); - var search = 0; - while (true) - { - var hit = IndexOf(data, header, search); - if (hit < 0) - { - return false; - } - - search = hit + header.Length; - if (hit != 0 && data[hit - 1] != (byte) '\r' && data[hit - 1] != (byte) '\n') - { - continue; - } - - var digitsStart = SkipWhitespace(data, hit + header.Length); - var cursor = digitsStart; - if (!TryReadInt(data, ref cursor, out _)) - { - return false; - } - - lengthField = (digitsStart, cursor); - return true; - } - } - - // Builds a new buffer with each edit (sorted, non-overlapping) spliced in. - static byte[] ApplyEdits(byte[] data, List<(int start, int end, byte[] replacement)> edits) - { - var length = data.Length; - foreach (var edit in edits) - { - length += edit.replacement.Length - (edit.end - edit.start); - } - - var output = new byte[length]; - var read = 0; - var write = 0; - foreach (var edit in edits) - { - var copy = edit.start - read; - Array.Copy(data, read, output, write, copy); - write += copy; - Array.Copy(edit.replacement, 0, output, write, edit.replacement.Length); - write += edit.replacement.Length; - read = edit.end; - } - - Array.Copy(data, read, output, write, data.Length - read); - return output; - } - - // Overwrites a cross-reference entry's fixed 10-digit, zero-padded offset field. - static void WriteOffset(byte[] data, int position, int offset) - { - for (var index = 9; index >= 0; index--) - { - data[position + index] = (byte) ('0' + offset % 10); - offset /= 10; - } - } - - static int IndexOf(byte[] data, ReadOnlySpan value, int start) - { - var hit = data.AsSpan(start).IndexOf(value); - return hit < 0 ? -1 : hit + start; - } - - static int LastIndexOf(byte[] data, ReadOnlySpan value, int end) => - data.AsSpan(0, end).LastIndexOf(value); - - static bool StartsWith(byte[] data, int position, ReadOnlySpan value) => - position + value.Length <= data.Length && - data.AsSpan(position, value.Length).SequenceEqual(value); - - static bool IsAllWhitespace(byte[] data, int start, int end) - { - for (var index = start; index < end; index++) - { - if (!IsWhitespace(data[index])) - { - return false; - } - } - - return true; - } - - static int SkipEol(byte[] data, int position) - { - if (position < data.Length && data[position] == (byte) '\r') - { - position++; - } - - if (position < data.Length && data[position] == (byte) '\n') - { - position++; - } - - return position; - } - - static bool TryReadInt(byte[] data, ref int position, out int value) - { - value = 0; - var start = position; - while (position < data.Length && IsDigit(data[position])) - { - value = value * 10 + (data[position] - '0'); - position++; - } - - return position > start; - } - - static int ParseFixedInt(byte[] data, int position, int width) - { - var value = 0; - for (var index = 0; index < width; index++) - { - value = value * 10 + (data[position + index] - '0'); - } - - return value; - } - - static byte[] AsciiDigits(int value) - { - if (value == 0) - { - return [(byte) '0']; - } - - var length = 0; - for (var remaining = value; remaining > 0; remaining /= 10) - { - length++; - } - - var bytes = new byte[length]; - for (var index = length - 1; index >= 0; index--) - { - bytes[index] = (byte) ('0' + value % 10); - value /= 10; - } - - return bytes; - } - - static byte[] AsciiBytes(string value) - { - var bytes = new byte[value.Length]; - for (var index = 0; index < value.Length; index++) - { - bytes[index] = (byte) value[index]; - } - - return bytes; - } -} diff --git a/src/Verify.DocNet/Verify.DocNet.csproj b/src/Verify.DocNet/Verify.DocNet.csproj index 94f384f..a444f37 100644 --- a/src/Verify.DocNet/Verify.DocNet.csproj +++ b/src/Verify.DocNet/Verify.DocNet.csproj @@ -4,6 +4,7 @@ + From 47855ef35653e8beba3fad7e50dd126d4b5c617f Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 23 Jul 2026 19:40:24 +1000 Subject: [PATCH 5/5] Add option to skip pdf byte normalization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ports the SkipPdfNormalization setting from Verify.PDFium (3fd22e9). Adds a SettingsTask/VerifySettings extension backed by a context key, so a caller whose producer already emits byte-deterministic documents can snapshot the bytes as produced. Normalizing those again copies the buffer, rescans it, and — when the XMP packet is canonicalized — rebuilds it and repairs the cross-reference table, all to change nothing. Default behaviour is unchanged: without the setting the bytes are normalized. SkipPdfNormalizationTests asserts the pairing rather than just that the setting round-trips: the skipped snapshot holds the producer's own bytes and the default one holds the neutralized bytes. A premise test pins that the sample is not already normalization-invariant, so the pair cannot both pass vacuously. --- readme.md | 8 ++--- src/Directory.Build.props | 2 +- ...mples.SkipPdfNormalization#00.verified.png | Bin 0 -> 63742 bytes ...mples.SkipPdfNormalization#01.verified.png | Bin 0 -> 36413 bytes ...ples.SkipPdfNormalization#pdf.verified.pdf | Bin 0 -> 2733 bytes .../Samples.SkipPdfNormalization.verified.txt | 29 ++++++++++++++++ src/Tests/Samples.cs | 9 +++++ ...otHoldsTheNeutralizedBytes#00.verified.png | Bin 0 -> 63742 bytes ...otHoldsTheNeutralizedBytes#01.verified.png | Bin 0 -> 36413 bytes ...tHoldsTheNeutralizedBytes#pdf.verified.pdf | Bin 0 -> 2718 bytes ...pshotHoldsTheNeutralizedBytes.verified.txt | 29 ++++++++++++++++ ...pshotHoldsTheProducerBytes#00.verified.png | Bin 0 -> 63742 bytes ...pshotHoldsTheProducerBytes#01.verified.png | Bin 0 -> 36413 bytes ...shotHoldsTheProducerBytes#pdf.verified.pdf | Bin 0 -> 2733 bytes ...SnapshotHoldsTheProducerBytes.verified.txt | 29 ++++++++++++++++ src/Tests/SkipPdfNormalizationTests.cs | 24 +++++++++++++ src/Verify.DocNet/VerifyDocNet.cs | 32 ++++++++++++++++++ src/Verify.DocNet/VerifyDocNet_Pdf.cs | 12 ++++--- 18 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 src/Tests/Samples.SkipPdfNormalization#00.verified.png create mode 100644 src/Tests/Samples.SkipPdfNormalization#01.verified.png create mode 100644 src/Tests/Samples.SkipPdfNormalization#pdf.verified.pdf create mode 100644 src/Tests/Samples.SkipPdfNormalization.verified.txt create mode 100644 src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#00.verified.png create mode 100644 src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#01.verified.png create mode 100644 src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#pdf.verified.pdf create mode 100644 src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes.verified.txt create mode 100644 src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#00.verified.png create mode 100644 src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#01.verified.png create mode 100644 src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#pdf.verified.pdf create mode 100644 src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes.verified.txt create mode 100644 src/Tests/SkipPdfNormalizationTests.cs diff --git a/readme.md b/readme.md index c2af908..0e5ae5d 100644 --- a/readme.md +++ b/readme.md @@ -77,7 +77,7 @@ public Task VerifyPdfStream() return Verify(stream, "pdf"); } ``` -snippet source | anchor +snippet source | anchor @@ -98,7 +98,7 @@ public Task VerifyPreserveTransparency() => VerifyFile("sample.pdf") .PreserveTransparency(); ``` -snippet source | anchor +snippet source | anchor @@ -112,7 +112,7 @@ public Task VerifyPageDimensions() => VerifyFile("sample.pdf") .PageDimensions(new(1080, 1920)); ``` -snippet source | anchor +snippet source | anchor ## VerifySinglePage @@ -134,7 +134,7 @@ public Task VerifySecondPage() return Verify(stream, "pdf").SinglePage(1); } ``` -snippet source | anchor +snippet source | anchor ## File Samples diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 7c522be..308b28a 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;NU1608;NU1109 - 3.4.0 + 3.5.0 1.0.0 preview false diff --git a/src/Tests/Samples.SkipPdfNormalization#00.verified.png b/src/Tests/Samples.SkipPdfNormalization#00.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..88503e0743624eeeaadbc4beda0b4bc204675a9f GIT binary patch literal 63742 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 literal 0 HcmV?d00001 diff --git a/src/Tests/Samples.SkipPdfNormalization#01.verified.png b/src/Tests/Samples.SkipPdfNormalization#01.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..35bf447742a339fd981576276e4d2851568fd493 GIT binary patch literal 36413 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 z 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 Jt%7;j{{xi~Dh>bu literal 0 HcmV?d00001 diff --git a/src/Tests/Samples.SkipPdfNormalization#pdf.verified.pdf b/src/Tests/Samples.SkipPdfNormalization#pdf.verified.pdf new file mode 100644 index 0000000000000000000000000000000000000000..21053ab04d7f7747bfcf68820605410c798a9f17 GIT binary patch literal 2733 zcmbtWdvFs)93Fh2Mx*snwL;4oD74bt-QMMLm(T>;rV*4>NNdFwlxuF&9!>7z-K9-Z znLz~wfss-Xn9)%ja8yP|Yn1_|%FD_qFg`$;`YgUWioqF1t;pbRXdbkTIOF}1?Ed!q zJ?^*PetX5UJzgsyZRX;EqX$1Rn*c!*YSTha3sgjG(!2Iu12*0 z)KRwCni{BuMk9p^qUvDGm`{08CbZ%O1cOt#Q;!)c5-t#%atp;^sy5nW;Hq)yfT|RA zm@?0Rp*Cp90gE%)p4!p1f8lOAZ%K0OJG;j>wruSlm@u@yXWz!Wl21>NO-JUu`u&1^ zn@44P3vMyyD5doo$lmmv?9A1N;8u@*na~u36c%#rob9 zvGItluZaixozmj`WvEt}U8&w5OnM`Tdvu(Ov%y@tpcKRkoyPu?cNtx`o4gYRmTieB|RWBdC8T zpAC?-4RO*&3Ibtc0m%pikGRNk4u|9au@9#|FH0ESmdlc-*X&%lgwA^;`B3usgvPng zgF}0YroQ}WrM&UpL{ICdWj9q%Z2P+Rp6bs(u@pc0;p*>B26si?9=dnUP|PVa9ZGv4RsG{KQ)|)Z_dl>U0dC6Hr1bM*!6m;vZ-T_fAz9GlY95~ zZ}|12$5v0eoIhsz^M$Kkc&lLgm(Thx?)Y`x%ZDd=r>!l%c|+N(=FZ3ai*MM!&2@NP z>~Vfz(!}2Q$$8^eGzq7-9y)b;JfpGQ%eyuwF8HeO`^Do|y?NODLB4HE{u8BNZ0vga z`TGYG^*;UB$qU1O_xyei0$_#7J=9ozbfh>@q&^IFhb-xhSfKm_W{Q7)_SEtt9IHe_ z45`g2`O=4l%LffnLUzJ|owL3|))$G86b(SF#9!edkPs0p=^$y6Cagq@VMLr1)!yDt zYN8a8f@DAqmm;BqqM>FSh7Gc+c#vq6c$`S+>@-UQnr8&Y-cU;UR4KCr95hEWG~ig8 zZYa%GgbU1VL%Q;ezRmT`N=uO-Fj`Yv=9hta_PNs^-6;Nn_0whai zkmyCvjf{yAgrv_x`h5S64TmXQAxh#*GspcOnNyBS%X* z8H}ILFAGX}`Fu`~8i0+F#gY!1OHv7F7$1|?1q z9jPMD_DzSYhnkK^fTDpkDr-uE{OCH7F;}WWqOQ9o7!;!+BaI)iYAUBNqjDIAb~I%| zw8g{B;Xsqj@j@9~mUeu2M&DvF4F=6L0cbOwc?dhlu^bUJo6;tLv<^RnlCc2+T`MDO z439oYM%e7!Xq&){vH@Tpl>;#6z%jyTUmJr&D4o~PL^%XC{83mdCm?z?%CD*hfmPQ} z%~XOafkhMzJ&olR0$>@AW #endregion + #region SkipPdfNormalization + + [Test] + public Task SkipPdfNormalization() => + VerifyFile("sample.pdf") + .SkipPdfNormalization(); + + #endregion + #region PreserveTransparency [Test] diff --git a/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#00.verified.png b/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#00.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..88503e0743624eeeaadbc4beda0b4bc204675a9f GIT binary patch literal 63742 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 literal 0 HcmV?d00001 diff --git a/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#01.verified.png b/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#01.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..35bf447742a339fd981576276e4d2851568fd493 GIT binary patch literal 36413 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 z z`x->E$vml+%4Q!ko%zBv1y zZT`b-xC5DDmXPe{`ckPC`U-L?f46B#7DTzGFaw`*2Mc@v)dE3jJryekN%9v$A`^+NRNw zcxYXzM>esJLBVrFqN`rZDE%pBx3%+vO1%<)w<~V))drg*SO0vl>q|4|RW|j^Y!`3F zH%q)VM#L|82S2$|o?YcN58oAj)7`M)E6sfMPM6?ffJRogH6}RCJW~=H_H}|pbc<6` z0EXy{Z7~s?8LxQt(1VG;ZNy?sF~4B@mc*YW{W`xx)X|o}h;!MqsggFV>}DD#fMyNZ z#?c#y|50aJ^Uu^6^!WP(&^lRvy940t=HtCpa?}ZB`kyOsT@3O(?4N3$B#=-+ALlLU zT7(xvv;A<0y2rR>EbFRDCTpOLh=|;D)XntVHem-2mlZ^h!JHu?ZqV$=Ec`l-^@OAQ zZVuVzQjb;+icGoYai}>$c$)RWrLt;HwbOI6Z8&Kpmp4C7`%R{t1Lj^&`S(dcaj zWR=VA-vsycLrerg{j%`ZqxI!s^H}7@f`_H26 z8glv%1yHZd6NdQL{vFq-u71ojmN@;GC3*BzxZ*j3ntU6HD@|u z@?Rywx4qCYlbHDs#p^5DQzPKT*~3uNzotF+#oea64vK*t$u(i}%LZqcuTD6rB2>a1 z#Jl(t>IH9)_Z&nC@n%(4aXkq zZpKv`#{SE1vrsFm9#-far7Cpu{-_%%gr-a-pKOucUC+s9P~%i!6<*?WIb8pu{l#XJ zUwcjqt!|gL61AU5ocj!C@Znes`gPc@@dw&$z8B=EX)}NH8s5KKHCknEG`i|$Ji_wE z9QGwp09JM##!*xlr-vQu7OnGs^qf4pm63c)(L?u%0eQeXT4=UKZ8^PFfL4}I{H+I< z+s9xQTj1Vb&lQ)y`ns!2QM1ae#W16e7W$wYzZl=y65>F_5rwH5KK^vBDAw@V( zL)G&J6Ae3z{MNgY4u~2 z1mw3&`naX>VOAbausXLP7kU|x_D@7_;;$8w2R4PVxPC=o(Mdu4;#>Q?)2gp1_wP~t zlDdbe%LFAxo&ymw-k%Rhh?FTTIpG?-RV;^YdHmif5Y!8MK4Q9G z9K`tN_CU*i`=Req+=s|C0V3%71AfGIlRq8w!Ibn3wG+!|^OtrWA4qBg@8!Ixx{V-C zd&$ojm*;a($7bs9(9%{L_WaP|R~=cs-l_cOB2I%>8S6p*!L?qEr3T5=(9OZmOBGC_ zULr;Zd$nQMp5xl(a}T9FN~osvPt$Q`?(B+i1NiUhSiSDDe=d?Zq__j}02XDQNd?U= zjOj&T3uHy@+|#D3UYy+-Lq{xwSHijbLAS2p=0*L9i&T5+-puHFA$~>AXOrUcZ$KU< zyx>~%CRjE?2vkgSjb3?S+mM+M&K(;%uD%s@@4eQ#O^pi zLj}*wX~0ydHu=RzV&I^GCQq6%`}5~r%IGx&#-B3USqoFicV|HIuxx02Hq;{U?VKMa zRBc+?AY;Fq8mFC*^KI&jZujix4{*l>GY%Lc#^Cj{C5=y+qqE+>jo4woyS(1SRhPI> zNf+!rK+1fXWnm1MZih^~dutqqv$uFC2C3bV`B7#(KE8vzJ{ZsVm}xF!Civ~cw^2wW zkN#%V^i-RBJLm zx$hj}M5rhsnYq+RskUiMBPkWtys=h#gs4wQV|5z0aS~ssx;)$&Ix#k2Mhq#?6strk zO^I^ED+WK^I`Gvv{5yoVxFugR>)tDqbW^#yL%Q4GBa2FZH18vnhw&XcJd}YRc8zUP zt&MY=oy{`WNQ}GOt6lkU@+;rR9A0cbQQM!jS?v@oKntC6;8Kw((k!L#9`$e$u)7@Y z)<5TZbCzY8&dW7t(|<8xuheDiiw8%W8BY+H8c)*u$2Axy6DF`OUiYfnw7XUBs3z&X zalGOk$Ug0*hM+83&3DLJQ@cMwq`SlMvb7TkKNGu7J!j%FSz*Sjk;sQD9!GC{qV>(O z{h8(Q=0>LhFFGJt*02Qu;$Fp-oYdT|`ANMeoq0{Q-1Fa_Ir7*2WS@Zrkefcp{Ykho$`B|PkSL`AhM zT^nfN&s=TNv6+vo6jc7WT;vQFafjsdly; z|Iw=W?y1dd@C!V#u0zWlEc+rAX2g;1+LP7UOlPgb9>}1+Zf>0GL@h6SD`AyCW#r03 zcfUrhNA2xBca(j{M%H_iX)y*antD0E?kT;knQN$Bb9_5@J*QAJNa6;r+$oFV`t*Lc zE>3%UWoR0>X6uOheDVAnC5?8)rDk*)1?2)*-a06aFx+J?_K zYPi8-yF*pFnYY<>*ydB=a|bC#*SMw+9T<Y!1PG!A=V3^&uMObrj=*QhU+g@3EA_7hq*+IkH zH;5m9I`BVq18D^`)w*^Y@!_%}Hm2abA}|`~Jw?n3Dl|SJ*PTBMOLKva;n?{i1SM`r zo(KQm`11ze+9n51qDka`|M`Ef$^QleTujFKk$ Jt%7;j{{xi~Dh>bu literal 0 HcmV?d00001 diff --git a/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#pdf.verified.pdf b/src/Tests/SkipPdfNormalizationTests.NormalizedSnapshotHoldsTheNeutralizedBytes#pdf.verified.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f2036d9327494a00a0881d5aa5195b600bb778f6 GIT binary patch literal 2718 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 literal 0 HcmV?d00001 diff --git a/src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#01.verified.png b/src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#01.verified.png new file mode 100644 index 0000000000000000000000000000000000000000..35bf447742a339fd981576276e4d2851568fd493 GIT binary patch literal 36413 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 z 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 Jt%7;j{{xi~Dh>bu literal 0 HcmV?d00001 diff --git a/src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#pdf.verified.pdf b/src/Tests/SkipPdfNormalizationTests.SkippedSnapshotHoldsTheProducerBytes#pdf.verified.pdf new file mode 100644 index 0000000000000000000000000000000000000000..21053ab04d7f7747bfcf68820605410c798a9f17 GIT binary patch literal 2733 zcmbtWdvFs)93Fh2Mx*snwL;4oD74bt-QMMLm(T>;rV*4>NNdFwlxuF&9!>7z-K9-Z znLz~wfss-Xn9)%ja8yP|Yn1_|%FD_qFg`$;`YgUWioqF1t;pbRXdbkTIOF}1?Ed!q zJ?^*PetX5UJzgsyZRX;EqX$1Rn*c!*YSTha3sgjG(!2Iu12*0 z)KRwCni{BuMk9p^qUvDGm`{08CbZ%O1cOt#Q;!)c5-t#%atp;^sy5nW;Hq)yfT|RA zm@?0Rp*Cp90gE%)p4!p1f8lOAZ%K0OJG;j>wruSlm@u@yXWz!Wl21>NO-JUu`u&1^ zn@44P3vMyyD5doo$lmmv?9A1N;8u@*na~u36c%#rob9 zvGItluZaixozmj`WvEt}U8&w5OnM`Tdvu(Ov%y@tpcKRkoyPu?cNtx`o4gYRmTieB|RWBdC8T zpAC?-4RO*&3Ibtc0m%pikGRNk4u|9au@9#|FH0ESmdlc-*X&%lgwA^;`B3usgvPng zgF}0YroQ}WrM&UpL{ICdWj9q%Z2P+Rp6bs(u@pc0;p*>B26si?9=dnUP|PVa9ZGv4RsG{KQ)|)Z_dl>U0dC6Hr1bM*!6m;vZ-T_fAz9GlY95~ zZ}|12$5v0eoIhsz^M$Kkc&lLgm(Thx?)Y`x%ZDd=r>!l%c|+N(=FZ3ai*MM!&2@NP z>~Vfz(!}2Q$$8^eGzq7-9y)b;JfpGQ%eyuwF8HeO`^Do|y?NODLB4HE{u8BNZ0vga z`TGYG^*;UB$qU1O_xyei0$_#7J=9ozbfh>@q&^IFhb-xhSfKm_W{Q7)_SEtt9IHe_ z45`g2`O=4l%LffnLUzJ|owL3|))$G86b(SF#9!edkPs0p=^$y6Cagq@VMLr1)!yDt zYN8a8f@DAqmm;BqqM>FSh7Gc+c#vq6c$`S+>@-UQnr8&Y-cU;UR4KCr95hEWG~ig8 zZYa%GgbU1VL%Q;ezRmT`N=uO-Fj`Yv=9hta_PNs^-6;Nn_0whai zkmyCvjf{yAgrv_x`h5S64TmXQAxh#*GspcOnNyBS%X* z8H}ILFAGX}`Fu`~8i0+F#gY!1OHv7F7$1|?1q z9jPMD_DzSYhnkK^fTDpkDr-uE{OCH7F;}WWqOQ9o7!;!+BaI)iYAUBNqjDIAb~I%| zw8g{B;Xsqj@j@9~mUeu2M&DvF4F=6L0cbOwc?dhlu^bUJo6;tLv<^RnlCc2+T`MDO z439oYM%e7!Xq&){vH@Tpl>;#6z%jyTUmJr&D4o~PL^%XC{83mdCm?z?%CD*hfmPQ} z%~XOafkhMzJ&olR0$>@AW + await Verify(new MemoryStream(await File.ReadAllBytesAsync("sample.pdf")), "pdf") + .SkipPdfNormalization(); + + [Test] + public async Task NormalizedSnapshotHoldsTheNeutralizedBytes() => + await Verify(new MemoryStream(await File.ReadAllBytesAsync("sample.pdf")), "pdf"); +} diff --git a/src/Verify.DocNet/VerifyDocNet.cs b/src/Verify.DocNet/VerifyDocNet.cs index 7fc14fe..1d7ca67 100644 --- a/src/Verify.DocNet/VerifyDocNet.cs +++ b/src/Verify.DocNet/VerifyDocNet.cs @@ -112,4 +112,36 @@ static bool GetPreserveTransparency(this IReadOnlyDictionary set return false; } + + /// + /// Snapshots the pdf bytes exactly as produced, skipping the normalization that neutralizes the + /// trailer /ID, the /CreationDate and /ModDate, and the XMP dates and + /// identifiers. Use it when the producer already emits byte-deterministic documents, since + /// normalizing them again copies the whole buffer, rescans it, and — when the XMP packet is + /// canonicalized — rebuilds it and repairs the cross-reference table, all to change nothing. + /// + /// + /// Only skip this when the producer is genuinely deterministic. Without it a freshly generated + /// pdf carries a wall-clock /CreationDate and a fresh /ID, so the snapshot differs + /// on every run. + /// + /// The XMP canonicalization is worth calling out because it is the pass that changes bytes for + /// an already-deterministic producer: it collapses the packet's whitespace, so enabling or + /// disabling this setting on an existing suite shifts the stored .verified.pdf even + /// though nothing about the document changed. Expect to re-accept those snapshots once. + /// + /// + public static void SkipPdfNormalization(this VerifySettings settings) => + settings.Context["VerifyDocNetSkipNormalization"] = true; + + /// + public static SettingsTask SkipPdfNormalization(this SettingsTask settings) + { + settings.CurrentSettings.SkipPdfNormalization(); + return settings; + } + + static bool GetNormalize(this IReadOnlyDictionary settings) => + !settings.TryGetValue("VerifyDocNetSkipNormalization", out var value) || + value is not true; } \ No newline at end of file diff --git a/src/Verify.DocNet/VerifyDocNet_Pdf.cs b/src/Verify.DocNet/VerifyDocNet_Pdf.cs index e457bee..bbc9831 100644 --- a/src/Verify.DocNet/VerifyDocNet_Pdf.cs +++ b/src/Verify.DocNet/VerifyDocNet_Pdf.cs @@ -24,10 +24,14 @@ static ConversionResult Convert(string? name, Stream stream, IReadOnlyDictionary bytes : DocLib.Instance.Split(bytes, start, endExclusive - 1); - // Neutralize the volatile fields for the pdf snapshot. When the whole document is reused - // this must happen only after the reader, which reads lazily from the same buffer, has been - // released. - pdfBytes = PdfNormalizer.Normalize(pdfBytes); + if (settings.GetNormalize()) + { + // Neutralize the volatile fields for the pdf snapshot. When the whole document is reused + // this must happen only after the reader, which reads lazily from the same buffer, has + // been released. + pdfBytes = PdfNormalizer.Normalize(pdfBytes); + } + targets.Add( new("pdf", new MemoryStream(pdfBytes), "pdf") {