mirror of
https://github.com/qpdf/qpdf.git
synced 2024-06-03 19:00:51 +00:00
Write offsets as unsigned in linearization hint tables (fixes #1023)
This commit is contained in:
parent
9fc02e2f91
commit
71566a2761
|
@ -1,5 +1,8 @@
|
||||||
2023-10-14 Jay Berkenbilt <ejb@ql.org>
|
2023-10-14 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Tweak linearization code to better handle files between 2 GB and
|
||||||
|
4 GB in size. Fixes #1023.
|
||||||
|
|
||||||
* Fix serious bug: qpdf could discard a the character after an
|
* Fix serious bug: qpdf could discard a the character after an
|
||||||
escaped octal string. For content, this would only happen with QDF
|
escaped octal string. For content, this would only happen with QDF
|
||||||
or when normalizing content, but it could have happened in a
|
or when normalizing content, but it could have happened in a
|
||||||
|
|
|
@ -1437,6 +1437,12 @@ class QPDF
|
||||||
{
|
{
|
||||||
return QIntC::to_int(i);
|
return QIntC::to_int(i);
|
||||||
}
|
}
|
||||||
|
template <typename T>
|
||||||
|
static unsigned long long
|
||||||
|
toULL(T const& i)
|
||||||
|
{
|
||||||
|
return QIntC::to_ulonglong(i);
|
||||||
|
}
|
||||||
|
|
||||||
class Members
|
class Members
|
||||||
{
|
{
|
||||||
|
|
|
@ -1670,11 +1670,11 @@ QPDF::writeHPageOffset(BitWriter& w)
|
||||||
HPageOffset& t = m->page_offset_hints;
|
HPageOffset& t = m->page_offset_hints;
|
||||||
|
|
||||||
w.writeBitsInt(t.min_nobjects, 32); // 1
|
w.writeBitsInt(t.min_nobjects, 32); // 1
|
||||||
w.writeBitsInt(toI(t.first_page_offset), 32); // 2
|
w.writeBits(toULL(t.first_page_offset), 32); // 2
|
||||||
w.writeBitsInt(t.nbits_delta_nobjects, 16); // 3
|
w.writeBitsInt(t.nbits_delta_nobjects, 16); // 3
|
||||||
w.writeBitsInt(t.min_page_length, 32); // 4
|
w.writeBitsInt(t.min_page_length, 32); // 4
|
||||||
w.writeBitsInt(t.nbits_delta_page_length, 16); // 5
|
w.writeBitsInt(t.nbits_delta_page_length, 16); // 5
|
||||||
w.writeBitsInt(t.min_content_offset, 32); // 6
|
w.writeBits(toULL(t.min_content_offset), 32); // 6
|
||||||
w.writeBitsInt(t.nbits_delta_content_offset, 16); // 7
|
w.writeBitsInt(t.nbits_delta_content_offset, 16); // 7
|
||||||
w.writeBitsInt(t.min_content_length, 32); // 8
|
w.writeBitsInt(t.min_content_length, 32); // 8
|
||||||
w.writeBitsInt(t.nbits_delta_content_length, 16); // 9
|
w.writeBitsInt(t.nbits_delta_content_length, 16); // 9
|
||||||
|
@ -1717,7 +1717,7 @@ QPDF::writeHSharedObject(BitWriter& w)
|
||||||
HSharedObject& t = m->shared_object_hints;
|
HSharedObject& t = m->shared_object_hints;
|
||||||
|
|
||||||
w.writeBitsInt(t.first_shared_obj, 32); // 1
|
w.writeBitsInt(t.first_shared_obj, 32); // 1
|
||||||
w.writeBitsInt(toI(t.first_shared_offset), 32); // 2
|
w.writeBits(toULL(t.first_shared_offset), 32); // 2
|
||||||
w.writeBitsInt(t.nshared_first_page, 32); // 3
|
w.writeBitsInt(t.nshared_first_page, 32); // 3
|
||||||
w.writeBitsInt(t.nshared_total, 32); // 4
|
w.writeBitsInt(t.nshared_total, 32); // 4
|
||||||
w.writeBitsInt(t.nbits_nobjects, 16); // 5
|
w.writeBitsInt(t.nbits_nobjects, 16); // 5
|
||||||
|
@ -1749,7 +1749,7 @@ void
|
||||||
QPDF::writeHGeneric(BitWriter& w, HGeneric& t)
|
QPDF::writeHGeneric(BitWriter& w, HGeneric& t)
|
||||||
{
|
{
|
||||||
w.writeBitsInt(t.first_object, 32); // 1
|
w.writeBitsInt(t.first_object, 32); // 1
|
||||||
w.writeBitsInt(toI(t.first_object_offset), 32); // 2
|
w.writeBits(toULL(t.first_object_offset), 32); // 2
|
||||||
w.writeBitsInt(t.nobjects, 32); // 3
|
w.writeBitsInt(t.nobjects, 32); // 3
|
||||||
w.writeBitsInt(t.group_length, 32); // 4
|
w.writeBitsInt(t.group_length, 32); // 4
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user