From 6f8ce8db6e7a80f0fa2eb1b440b9f74957af916f Mon Sep 17 00:00:00 2001 From: Kenta Ishizaki Date: Sun, 24 May 2026 18:18:35 +0900 Subject: [PATCH] Skip trailing null bytes when searching for EOF marker Some PDF generators (e.g. Atos/Fonet) append thousands of null bytes after %%EOF. Since null bytes are not line terminators, they prevented the EOF marker from being found within the trailing byte scan window. Scan backwards from the end of the file in TRAILING_BYTECOUNT-sized chunks, using String#rindex to find the last non-null byte. This locates the effective end of the PDF without an O(N) per-byte seek+read loop, which would be a DoS vector on a file padded with hundreds of MB of nulls. Treat an all-null file (or any file where the skip walks all the way to offset 0) as MalformedPDFError. Fixes #585 --- lib/pdf/reader/buffer.rb | 26 +++++++++++++++++++++++--- spec/data/trailing_null_bytes.pdf | Bin 0 -> 67721 bytes spec/integrity.yml | 3 +++ spec/reader/buffer_spec.rb | 18 ++++++++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 spec/data/trailing_null_bytes.pdf diff --git a/lib/pdf/reader/buffer.rb b/lib/pdf/reader/buffer.rb index 69062ee4..8fe4fc95 100644 --- a/lib/pdf/reader/buffer.rb +++ b/lib/pdf/reader/buffer.rb @@ -152,10 +152,30 @@ def token #: () -> Integer def find_first_xref_offset check_size_is_non_zero - @io.seek(-TRAILING_BYTECOUNT, IO::SEEK_END) rescue @io.seek(0) - data = @io.read(TRAILING_BYTECOUNT) - raise MalformedPDFError, "PDF does not contain EOF marker" if data.nil? + # Skip trailing null bytes to find the effective end of the PDF. + # Some generators (e.g. Atos/Fonet) append thousands of null bytes + # after %%EOF. Scan backwards in chunks so a file padded with a huge + # run of nulls doesn't turn into a per-byte seek+read loop. + @io.seek(0, IO::SEEK_END) + end_pos = @io.pos + + while end_pos > 0 + chunk_size = [TRAILING_BYTECOUNT, end_pos].min + @io.seek(end_pos - chunk_size) + chunk = @io.read(chunk_size) + if chunk && (idx = chunk.rindex(/[^\x00]/)) + end_pos = end_pos - chunk_size + idx + 1 + break + end + end_pos -= chunk_size + end + + start_pos = [end_pos - TRAILING_BYTECOUNT, 0].max + @io.seek(start_pos) + data = @io.read(end_pos - start_pos) + + raise MalformedPDFError, "PDF does not contain EOF marker" if data.nil? || data.empty? # the PDF 1.7 spec (section #3.4) says that EOL markers can be either \r, \n, or both. lines = data.split(/[\n\r]+/).reverse diff --git a/spec/data/trailing_null_bytes.pdf b/spec/data/trailing_null_bytes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ad3f042463c853e45cec90de2a464f26c48ddefd GIT binary patch literal 67721 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 literal 0 HcmV?d00001 diff --git a/spec/integrity.yml b/spec/integrity.yml index 957652c7..f71414d1 100644 --- a/spec/integrity.yml +++ b/spec/integrity.yml @@ -449,6 +449,9 @@ data/tounicode-wrong-type-indirect.pdf: data/tounicode-wrong-type.pdf: :bytes: 12219 :md5: 0be721e975bc8ec21eae829e0cddc1af +data/trailing_null_bytes.pdf: + :bytes: 67721 + :md5: 6b9b6375ca194fdf8687a44130c54df2 data/truetype-arial.pdf: :bytes: 1387 :md5: 2b3e4ff85b618d1f4c6b3b5df2631ab0 diff --git a/spec/reader/buffer_spec.rb b/spec/reader/buffer_spec.rb index 9e730efc..cfe340db 100644 --- a/spec/reader/buffer_spec.rb +++ b/spec/reader/buffer_spec.rb @@ -631,6 +631,24 @@ expect(buffer.find_first_xref_offset).to eql(145) end end + + context "trailing_null_bytes.pdf (null bytes after the EOF marker)" do + it "finds the first xref offset" do + file = File.new pdf_spec_file("trailing_null_bytes") + buffer = PDF::Reader::Buffer.new file + + expect(buffer.find_first_xref_offset).to eql(145) + end + end + + context "when the file is nothing but null bytes" do + it "raises a MalformedPDFError" do + io = StringIO.new("\x00" * 10_000) + buffer = PDF::Reader::Buffer.new(io) + + expect { buffer.find_first_xref_offset }.to raise_error(PDF::Reader::MalformedPDFError) + end + end end describe PDF::Reader::Buffer, "read method" do