From b0a96ce6aa95c4d23e40eed3cede2f46e935bba7 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 22 Feb 2014 22:12:34 -0500 Subject: [PATCH] Fix calculation of xref stream stream columns Fix problem: if the last object in the first part of a linearized file had an offset that was below 65536 by less than the size of the hint stream, the xref stream was invalid and the resulting file is not usable. --- ChangeLog | 7 +++++++ libqpdf/QPDFWriter.cc | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 02937066..d722e3c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-02-22 Jay Berkenbilt + + * Bug fix: if the last object in the first part of a linearized + file had an offset that was below 65536 by less than the size of + the hint stream, the xref stream was invalid and the resulting file + is not usable. This is now fixed. + 2014-01-14 Jay Berkenbilt * 5.1.1: release diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 7dd0d54d..0f299a45 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -2447,7 +2447,7 @@ QPDFWriter::writeXRefStream(int xref_id, int max_id, qpdf_offset_t max_offset, qpdf_offset_t space_before_zero = xref_offset - 1; // field 1 contains offsets and object stream identifiers - int f1_size = std::max(bytesNeeded(max_offset), + int f1_size = std::max(bytesNeeded(max_offset + hint_length), bytesNeeded(max_id)); // field 2 contains object stream indices