diff --git a/libqpdf/QPDF_objects.cc b/libqpdf/QPDF_objects.cc index 08f6967..888b4df 100644 --- a/libqpdf/QPDF_objects.cc +++ b/libqpdf/QPDF_objects.cc @@ -1608,7 +1608,8 @@ QPDF::resolveObjectsInStream(int obj_stream_number) m->file->getName() + " object stream " + std::to_string(obj_stream_number), +"object " + std::to_string(id) + " 0", offset, - msg}; + msg, + true}; }; if (m->resolved_object_streams.count(obj_stream_number)) { @@ -1667,6 +1668,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number) bool is_first = true; for (unsigned int i = 0; i < n; ++i) { auto tnum = readToken(input); + auto id_offset = input.getLastOffset(); auto toffset = readToken(input); if (!(tnum.isInteger() && toffset.isInteger())) { throw damaged(0, input.getLastOffset(), "expected integer in object stream header"); @@ -1677,13 +1679,13 @@ QPDF::resolveObjectsInStream(int obj_stream_number) if (num == obj_stream_number) { QTC::TC("qpdf", "QPDF ignore self-referential object stream"); - warn(damaged(num, input.getLastOffset(), "object stream claims to contain itself")); + warn(damaged(num, id_offset, "object stream claims to contain itself")); continue; } if (num < 1) { QTC::TC("qpdf", "QPDF object stream contains id < 1"); - warn(damaged(num, input.getLastOffset(), "object id is invalid"s)); + warn(damaged(num, id_offset, "object id is invalid"s)); continue; } @@ -1691,8 +1693,9 @@ QPDF::resolveObjectsInStream(int obj_stream_number) QTC::TC("qpdf", "QPDF object stream offsets not increasing"); warn(damaged( num, - offset, - "offset is invalid (must be larger than previous offset " + + input.getLastOffset(), + "offset " + std::to_string(offset) + + " is invalid (must be larger than previous offset " + std::to_string(last_offset) + ")")); continue; } @@ -1702,7 +1705,8 @@ QPDF::resolveObjectsInStream(int obj_stream_number) } if (first + offset >= end_offset) { - warn(damaged(num, offset, "offset is too large")); + warn(damaged( + num, input.getLastOffset(), "offset " + std::to_string(offset) + " is too large")); continue; } diff --git a/qpdf/qtest/qpdf/issue-143.out b/qpdf/qtest/qpdf/issue-143.out index 00c8f4c..e6fc61e 100644 --- a/qpdf/qtest/qpdf/issue-143.out +++ b/qpdf/qtest/qpdf/issue-143.out @@ -14,9 +14,9 @@ WARNING: issue-143.pdf (object 1 0, offset 24): expected dictionary key but foun WARNING: issue-143.pdf (object 1 0, offset 21): stream dictionary lacks /Length key WARNING: issue-143.pdf (object 1 0, offset 84): attempting to recover stream length WARNING: issue-143.pdf (object 1 0, offset 84): recovered stream length: 606 -WARNING: issue-143.pdf object stream 1 (object 0 0, offset 4): object id is invalid -WARNING: issue-143.pdf object stream 1 (object 0 0, offset 15): object id is invalid -WARNING: issue-143.pdf object stream 1 (object 6 0): offset is invalid (must be larger than previous offset 0) -WARNING: issue-143.pdf object stream 1 (object 0 0, offset 27): object id is invalid +WARNING: issue-143.pdf object stream 1 (object 0 0, offset 0): object id is invalid +WARNING: issue-143.pdf object stream 1 (object 0 0, offset 11): object id is invalid +WARNING: issue-143.pdf object stream 1 (object 6 0, offset 21): offset 0 is invalid (must be larger than previous offset 0) +WARNING: issue-143.pdf object stream 1 (object 0 0, offset 23): object id is invalid WARNING: issue-143.pdf object stream 1 (object 2 0, offset 33): expected dictionary key but found non-name object; inserting key /QPDFFake1 qpdf: issue-143.pdf: unable to find page tree diff --git a/qpdf/qtest/qpdf/object-stream-self-ref.out b/qpdf/qtest/qpdf/object-stream-self-ref.out index 84a2d3e..78550b8 100644 --- a/qpdf/qtest/qpdf/object-stream-self-ref.out +++ b/qpdf/qtest/qpdf/object-stream-self-ref.out @@ -1,2 +1,2 @@ -WARNING: object-stream-self-ref.pdf object stream 1 (object 1 0, offset 2): object stream claims to contain itself +WARNING: object-stream-self-ref.pdf object stream 1 (object 1 0, offset 0): object stream claims to contain itself qpdf: operation succeeded with warnings; resulting file may have some problems