aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2023-02-19 01:37:38 +0100
committerJay Berkenbilt <ejb@ql.org>2023-02-19 01:38:49 +0100
commit0f97e98203dfa78cf3273005f215d2d026390e5c (patch)
treec02b7969653620375d2482ce614e72414cd82bc7
parent088fabd9b9affe14c006e1354892f80c7bbbeebe (diff)
downloadqpdf-0f97e98203dfa78cf3273005f215d2d026390e5c.tar.zst
Handle linearization warnings as proper warning (fixes #851)
-rw-r--r--ChangeLog7
-rw-r--r--README-maintainer2
-rw-r--r--TODO1
-rw-r--r--include/qpdf/Constants.h17
-rw-r--r--include/qpdf/QPDF.hh11
-rw-r--r--libqpdf/QPDFJob.cc10
-rw-r--r--libqpdf/QPDF_linearization.cc130
-rw-r--r--manual/release-notes.rst6
-rw-r--r--qpdf/qtest/linearization.test9
-rw-r--r--qpdf/qtest/qpdf/badlin1.out11
-rw-r--r--qpdf/qtest/qpdf/lin1.out7
-rw-r--r--qpdf/qtest/qpdf/lin2.out7
-rw-r--r--qpdf/qtest/qpdf/lin3-check-nowarn.out4
-rw-r--r--qpdf/qtest/qpdf/lin3.out123
-rw-r--r--qpdf/qtest/qpdf/lin4.out5
-rw-r--r--qpdf/qtest/qpdf/lin5.out123
-rw-r--r--qpdf/qtest/qpdf/lin6.out183
-rw-r--r--qpdf/qtest/qpdf/lin7.out119
-rw-r--r--qpdf/qtest/qpdf/lin8.out183
-rw-r--r--qpdf/qtest/qpdf/lin9.out5
-rw-r--r--qpdf/qtest/qpdf/linearization-bounds-1.out2
-rw-r--r--qpdf/qtest/qpdf/linearization-bounds-2.out2
-rw-r--r--qpdf/qtest/qpdf/linearization-large-vector-alloc.out2
23 files changed, 487 insertions, 482 deletions
diff --git a/ChangeLog b/ChangeLog
index c61625c0..db242032 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2023-02-18 Jay Berkenbilt <ejb@ql.org>
+
+ * Treat all linearization errors and warnings as warnings, and
+ issue them through the normal warning system using the new error
+ code qpdf_e_linearization. That means that --no-warn will suppress
+ them, and the file name is included in the warning. Fixes #851.
+
2023-01-28 Jay Berkenbilt <ejb@ql.org>
* New option --remove-restrictions removes security restrictions
diff --git a/README-maintainer b/README-maintainer
index 1ca7de8a..2ecbfaa6 100644
--- a/README-maintainer
+++ b/README-maintainer
@@ -127,6 +127,8 @@ CODING RULES
"Code Formatting" section in manual/contributing.rst for details.
See also "CODE FORMATTING" below.
+* Use std::to_string instead of QUtil::int_to_string et al
+
* Use of assert:
* Test code: #include <qpdf/assert_test.h> first.
diff --git a/TODO b/TODO
index 9a8a4ec2..88a022b4 100644
--- a/TODO
+++ b/TODO
@@ -11,7 +11,6 @@ Always
* Fix #874 -- make args in --encrypt to match the json and make
positional fill in the gaps
-* Fix #851 -- not suppressing linearization warnings
* Maybe fix #553 -- use file times for attachments
* Clarify idempotency section to emphasize --deterministic-id over
--static-id
diff --git a/include/qpdf/Constants.h b/include/qpdf/Constants.h
index 84bd190b..e3626ead 100644
--- a/include/qpdf/Constants.h
+++ b/include/qpdf/Constants.h
@@ -83,14 +83,15 @@ enum qpdf_exit_code_e {
enum qpdf_error_code_e {
qpdf_e_success = 0,
- qpdf_e_internal, /* logic/programming error -- indicates bug */
- qpdf_e_system, /* I/O error, memory error, etc. */
- qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */
- qpdf_e_password, /* incorrect password for encrypted file */
- qpdf_e_damaged_pdf, /* syntax errors or other damage in PDF */
- qpdf_e_pages, /* erroneous or unsupported pages structure */
- qpdf_e_object, /* type/bounds errors accessing objects */
- qpdf_e_json, /* error in qpdf JSON */
+ qpdf_e_internal, /* logic/programming error -- indicates bug */
+ qpdf_e_system, /* I/O error, memory error, etc. */
+ qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */
+ qpdf_e_password, /* incorrect password for encrypted file */
+ qpdf_e_damaged_pdf, /* syntax errors or other damage in PDF */
+ qpdf_e_pages, /* erroneous or unsupported pages structure */
+ qpdf_e_object, /* type/bounds errors accessing objects */
+ qpdf_e_json, /* error in qpdf JSON */
+ qpdf_e_linearization, /* linearization warning */
};
/* Object Types */
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index 7fe02f0b..3f998b9c 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -32,6 +32,7 @@
#include <memory>
#include <stdio.h>
#include <string>
+#include <string_view>
#include <vector>
#include <qpdf/Buffer.hh>
@@ -1565,6 +1566,7 @@ class QPDF
void readLinearizationData();
bool checkLinearizationInternal();
void dumpLinearizationDataInternal();
+ void linearizationWarning(std::string_view);
QPDFObjectHandle
readHintStream(Pipeline&, qpdf_offset_t offset, size_t length);
void readHPageOffset(BitStream);
@@ -1574,18 +1576,14 @@ class QPDF
qpdf_offset_t getLinearizationOffset(QPDFObjGen const&);
QPDFObjectHandle getUncompressedObject(
QPDFObjectHandle&, std::map<int, int> const& object_stream_data);
- int lengthNextN(int first_object, int n, std::list<std::string>& errors);
+ int lengthNextN(int first_object, int n);
void checkHPageOffset(
- std::list<std::string>& errors,
- std::list<std::string>& warnings,
std::vector<QPDFObjectHandle> const& pages,
std::map<int, int>& idx_to_obj);
void checkHSharedObject(
- std::list<std::string>& warnings,
- std::list<std::string>& errors,
std::vector<QPDFObjectHandle> const& pages,
std::map<int, int>& idx_to_obj);
- void checkHOutlines(std::list<std::string>& warnings);
+ void checkHOutlines();
void dumpHPageOffset();
void dumpHSharedObject();
void dumpHGeneric(HGeneric&);
@@ -1728,6 +1726,7 @@ class QPDF
// Linearization data
qpdf_offset_t first_xref_item_offset{0}; // actual value from file
bool uncompressed_after_compressed{false};
+ bool linearization_warnings{false};
// Linearization parameter dictionary and hint table data: may be
// read from file or computed prior to writing a linearized file
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index 6cd3c385..e311a1e4 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -783,7 +783,6 @@ QPDFJob::doCheck(QPDF& pdf)
// continue to perform additional checks after finding
// errors.
bool okay = true;
- bool warnings = false;
auto& cout = *this->m->log->getInfo();
cout << "checking " << m->infilename.get() << "\n";
try {
@@ -796,12 +795,7 @@ QPDFJob::doCheck(QPDF& pdf)
showEncryption(pdf);
if (pdf.isLinearized()) {
cout << "File is linearized\n";
- // any errors or warnings are reported by
- // checkLinearization(). We treat all issues reported here
- // as warnings.
- if (!pdf.checkLinearization()) {
- warnings = true;
- }
+ pdf.checkLinearization();
} else {
cout << "File is not linearized\n";
}
@@ -836,7 +830,7 @@ QPDFJob::doCheck(QPDF& pdf)
throw std::runtime_error("errors detected");
}
- if ((!pdf.getWarnings().empty()) || warnings) {
+ if (!pdf.getWarnings().empty()) {
this->m->warnings = true;
} else {
*this->m->log->getInfo() << "No syntax or stream encoding errors"
diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc
index 6c001767..926353fa 100644
--- a/libqpdf/QPDF_linearization.cc
+++ b/libqpdf/QPDF_linearization.cc
@@ -65,6 +65,13 @@ load_vector_vector(
bit_stream.skipToNextByte();
}
+void
+QPDF::linearizationWarning(std::string_view msg)
+{
+ this->m->linearization_warnings = true;
+ warn(qpdf_e_linearization, "", 0, std::string(msg));
+}
+
bool
QPDF::checkLinearization()
{
@@ -73,9 +80,9 @@ QPDF::checkLinearization()
readLinearizationData();
result = checkLinearizationInternal();
} catch (std::runtime_error& e) {
- *this->m->log->getError()
- << "WARNING: error encountered while checking linearization data: "
- << e.what() << "\n";
+ linearizationWarning(
+ "error encountered while checking linearization data: " +
+ std::string(e.what()));
}
return result;
}
@@ -333,9 +340,10 @@ QPDF::readHintStream(Pipeline& pl, qpdf_offset_t offset, size_t length)
}
qpdf_offset_t computed_end = offset + toO(length);
if ((computed_end < min_end_offset) || (computed_end > max_end_offset)) {
- *this->m->log->getError()
- << "expected = " << computed_end << "; actual = " << min_end_offset
- << ".." << max_end_offset << "\n";
+ linearizationWarning(
+ "expected = " + std::to_string(computed_end) +
+ "; actual = " + std::to_string(min_end_offset) + ".." +
+ std::to_string(max_end_offset));
throw damagedPDF(
"linearization dictionary", "hint table length mismatch");
}
@@ -476,9 +484,6 @@ QPDF::checkLinearizationInternal()
// All comments referring to the PDF spec refer to the spec for
// version 1.4.
- std::list<std::string> errors;
- std::list<std::string> warnings;
-
// Check all values in linearization parameter dictionary
LinParameters& p = this->m->linp;
@@ -489,21 +494,21 @@ QPDF::checkLinearizationInternal()
std::vector<QPDFObjectHandle> const& pages = getAllPages();
if (p.first_page_object != pages.at(0).getObjectID()) {
QTC::TC("qpdf", "QPDF err /O mismatch");
- errors.push_back("first page object (/O) mismatch");
+ linearizationWarning("first page object (/O) mismatch");
}
// N: number of pages
int npages = toI(pages.size());
if (p.npages != npages) {
// Not tested in the test suite
- errors.push_back("page count (/N) mismatch");
+ linearizationWarning("page count (/N) mismatch");
}
for (size_t i = 0; i < toS(npages); ++i) {
QPDFObjectHandle const& page = pages.at(i);
QPDFObjGen og(page.getObjGen());
if (this->m->xref_table[og].getType() == 2) {
- errors.push_back(
+ linearizationWarning(
"page dictionary for page " + std::to_string(i) +
" is compressed");
}
@@ -521,7 +526,7 @@ QPDF::checkLinearizationInternal()
}
if (this->m->file->tell() != this->m->first_xref_item_offset) {
QTC::TC("qpdf", "QPDF err /T mismatch");
- errors.push_back(
+ linearizationWarning(
"space before first xref item (/T) mismatch "
"(computed = " +
std::to_string(this->m->first_xref_item_offset) +
@@ -537,8 +542,9 @@ QPDF::checkLinearizationInternal()
// are in use.
if (this->m->uncompressed_after_compressed) {
- errors.push_back("linearized file contains an uncompressed object"
- " after a compressed one in a cross-reference stream");
+ linearizationWarning(
+ "linearized file contains an uncompressed object"
+ " after a compressed one in a cross-reference stream");
}
// Further checking requires optimization and order calculation.
@@ -587,7 +593,7 @@ QPDF::checkLinearizationInternal()
}
if ((p.first_page_end < min_E) || (p.first_page_end > max_E)) {
QTC::TC("qpdf", "QPDF warn /E mismatch");
- warnings.push_back(
+ linearizationWarning(
"end of first page section (/E) mismatch: /E = " +
std::to_string(p.first_page_end) + "; computed = " +
std::to_string(min_E) + ".." + std::to_string(max_E));
@@ -596,34 +602,11 @@ QPDF::checkLinearizationInternal()
// Check hint tables
std::map<int, int> shared_idx_to_obj;
- checkHSharedObject(errors, warnings, pages, shared_idx_to_obj);
- checkHPageOffset(errors, warnings, pages, shared_idx_to_obj);
- checkHOutlines(warnings);
-
- // Report errors
-
- bool result = true;
-
- // Treat all linearization errors as warnings. Many of them occur
- // in otherwise working files, so it's really misleading to treat
- // them as errors. We'll hang onto the distinction in the code for
- // now in case we ever have a chance to clean up the linearization
- // code.
- if (!errors.empty()) {
- result = false;
- for (auto const& error: errors) {
- *this->m->log->getError() << "WARNING: " << error << "\n";
- }
- }
+ checkHSharedObject(pages, shared_idx_to_obj);
+ checkHPageOffset(pages, shared_idx_to_obj);
+ checkHOutlines();
- if (!warnings.empty()) {
- result = false;
- for (auto const& warning: warnings) {
- *this->m->log->getError() << "WARNING: " << warning << "\n";
- }
- }
-
- return result;
+ return !this->m->linearization_warnings;
}
qpdf_offset_t
@@ -680,13 +663,13 @@ QPDF::getUncompressedObject(
}
int
-QPDF::lengthNextN(int first_object, int n, std::list<std::string>& errors)
+QPDF::lengthNextN(int first_object, int n)
{
int length = 0;
for (int i = 0; i < n; ++i) {
QPDFObjGen og(first_object + i, 0);
if (this->m->xref_table.count(og) == 0) {
- errors.push_back(
+ linearizationWarning(
"no xref table entry for " + std::to_string(first_object + i) +
" 0");
} else {
@@ -704,8 +687,6 @@ QPDF::lengthNextN(int first_object, int n, std::list<std::string>& errors)
void
QPDF::checkHPageOffset(
- std::list<std::string>& errors,
- std::list<std::string>& warnings,
std::vector<QPDFObjectHandle> const& pages,
std::map<int, int>& shared_idx_to_obj)
{
@@ -735,7 +716,7 @@ QPDF::checkHPageOffset(
}
qpdf_offset_t offset = getLinearizationOffset(first_page_og);
if (table_offset != offset) {
- warnings.push_back("first page object offset mismatch");
+ linearizationWarning("first page object offset mismatch");
}
for (int pageno = 0; pageno < npages; ++pageno) {
@@ -754,7 +735,7 @@ QPDF::checkHPageOffset(
he.delta_nobjects + this->m->page_offset_hints.min_nobjects;
if (h_nobjects != ce.nobjects) {
// This happens with pdlin when there are thumbnails.
- warnings.push_back(
+ linearizationWarning(
"object count mismatch for page " + std::to_string(pageno) +
": hint table = " + std::to_string(h_nobjects) +
"; computed = " + std::to_string(ce.nobjects));
@@ -762,13 +743,13 @@ QPDF::checkHPageOffset(
// Use value for number of objects in hint table rather than
// computed value if there is a discrepancy.
- int length = lengthNextN(first_object, h_nobjects, errors);
+ int length = lengthNextN(first_object, h_nobjects);
int h_length = toI(
he.delta_page_length + this->m->page_offset_hints.min_page_length);
if (length != h_length) {
// This condition almost certainly indicates a bad hint
// table or a bug in this code.
- errors.push_back(
+ linearizationWarning(
"page length mismatch for page " + std::to_string(pageno) +
": hint table = " + std::to_string(h_length) +
"; computed length = " + std::to_string(length) +
@@ -784,7 +765,7 @@ QPDF::checkHPageOffset(
if ((pageno == 0) && (he.nshared_objects > 0)) {
// pdlin and Acrobat both do this even though the spec
// states clearly and unambiguously that they should not.
- warnings.push_back("page 0 has shared identifier entries");
+ linearizationWarning("page 0 has shared identifier entries");
}
for (size_t i = 0; i < toS(he.nshared_objects); ++i) {
@@ -808,7 +789,7 @@ QPDF::checkHPageOffset(
for (int iter: hint_shared) {
if (!computed_shared.count(iter)) {
// pdlin puts thumbnails here even though it shouldn't
- warnings.push_back(
+ linearizationWarning(
"page " + std::to_string(pageno) + ": shared object " +
std::to_string(iter) +
": in hint table but not computed list");
@@ -820,10 +801,10 @@ QPDF::checkHPageOffset(
// Acrobat does not put some things including at least
// built-in fonts and procsets here, at least in some
// cases.
- warnings.push_back(
- "page " + std::to_string(pageno) + ": shared object " +
- std::to_string(iter) +
- ": in computed list but not hint table");
+ linearizationWarning(
+ ("page " + std::to_string(pageno) + ": shared object " +
+ std::to_string(iter) +
+ ": in computed list but not hint table"));
}
}
}
@@ -831,10 +812,7 @@ QPDF::checkHPageOffset(
void
QPDF::checkHSharedObject(
- std::list<std::string>& errors,
- std::list<std::string>& warnings,
- std::vector<QPDFObjectHandle> const& pages,
- std::map<int, int>& idx_to_obj)
+ std::vector<QPDFObjectHandle> const& pages, std::map<int, int>& idx_to_obj)
{
// Implementation note 125 says shared object groups always
// contain only one object. Implementation note 128 says that
@@ -856,7 +834,7 @@ QPDF::checkHSharedObject(
HSharedObject& so = this->m->shared_object_hints;
if (so.nshared_total < so.nshared_first_page) {
- errors.push_back("shared object hint table: ntotal < nfirst_page");
+ linearizationWarning("shared object hint table: ntotal < nfirst_page");
} else {
// The first nshared_first_page objects are consecutive
// objects starting with the first page object. The rest are
@@ -866,12 +844,12 @@ QPDF::checkHSharedObject(
if (i == so.nshared_first_page) {
QTC::TC("qpdf", "QPDF lin check shared past first page");
if (this->m->part8.empty()) {
- errors.push_back("part 8 is empty but nshared_total > "
- "nshared_first_page");
+ linearizationWarning("part 8 is empty but nshared_total > "
+ "nshared_first_page");
} else {
int obj = this->m->part8.at(0).getObjectID();
if (obj != so.first_shared_obj) {
- errors.push_back(
+ linearizationWarning(
"first shared object number mismatch: "
"hint table = " +
std::to_string(so.first_shared_obj) +
@@ -889,7 +867,7 @@ QPDF::checkHSharedObject(
qpdf_offset_t h_offset =
adjusted_offset(so.first_shared_offset);
if (offset != h_offset) {
- errors.push_back(
+ linearizationWarning(
"first shared object offset mismatch: hint table = " +
std::to_string(h_offset) +
"; computed = " + std::to_string(offset));
@@ -899,10 +877,10 @@ QPDF::checkHSharedObject(
idx_to_obj[i] = cur_object;
HSharedObjectEntry& se = so.entries.at(toS(i));
int nobjects = se.nobjects_minus_one + 1;
- int length = lengthNextN(cur_object, nobjects, errors);
+ int length = lengthNextN(cur_object, nobjects);
int h_length = so.min_group_length + se.delta_group_length;
if (length != h_length) {
- errors.push_back(
+ linearizationWarning(
"shared object " + std::to_string(i) +
" length mismatch: hint table = " +
std::to_string(h_length) +
@@ -914,7 +892,7 @@ QPDF::checkHSharedObject(
}
void
-QPDF::checkHOutlines(std::list<std::string>& warnings)
+QPDF::checkHOutlines()
{
// Empirically, Acrobat generates the correct value for the object
// number but incorrectly stores the next object number's offset
@@ -937,7 +915,7 @@ QPDF::checkHOutlines(std::list<std::string>& warnings)
// This case is not exercised in test suite since not
// permitted by the spec, but if this does occur, the
// code below would fail.
- warnings.push_back(
+ linearizationWarning(
"/Outlines key of root dictionary is not indirect");
return;
}
@@ -951,24 +929,24 @@ QPDF::checkHOutlines(std::list<std::string>& warnings)
qpdf_offset_t table_offset =
adjusted_offset(this->m->outline_hints.first_object_offset);
if (offset != table_offset) {
- warnings.push_back(
+ linearizationWarning(
"incorrect offset in outlines table: hint table = " +
std::to_string(table_offset) +
"; computed = " + std::to_string(offset));
}
int table_length = this->m->outline_hints.group_length;
if (length != table_length) {
- warnings.push_back(
+ linearizationWarning(
"incorrect length in outlines table: hint table = " +
std::to_string(table_length) +
"; computed = " + std::to_string(length));
}
} else {
- warnings.push_back("incorrect first object number in outline "
- "hints table.");
+ linearizationWarning("incorrect first object number in outline "
+ "hints table.");
}
} else {
- warnings.push_back("incorrect object count in outline hint table");
+ linearizationWarning("incorrect object count in outline hint table");
}
}
@@ -980,7 +958,7 @@ QPDF::showLinearizationData()
checkLinearizationInternal();
dumpLinearizationDataInternal();
} catch (QPDFExc& e) {
- *this->m->log->getError() << e.what() << "\n";
+ linearizationWarning(e.what());
}
}
diff --git a/manual/release-notes.rst b/manual/release-notes.rst
index ef5f2df4..a038005a 100644
--- a/manual/release-notes.rst
+++ b/manual/release-notes.rst
@@ -19,6 +19,12 @@ For a detailed list of changes, please see the file
- New method ``QPDF::removeSecurityRestrictions`` removes security
restrictions from digitally signed files.
+ - Bug fixes
+
+ - Linearization warnings are now treated like normal warnings in
+ that they include the file name and are suppressed with the
+ :qpdf:ref:`--no-warn` option.
+
- Performance enhancements
- Include more code tidying and performance improvements from M.
diff --git a/qpdf/qtest/linearization.test b/qpdf/qtest/linearization.test
index 76a61d7d..553dfc3a 100644
--- a/qpdf/qtest/linearization.test
+++ b/qpdf/qtest/linearization.test
@@ -45,14 +45,14 @@ my @to_linearize =
);
$n_tests += @linearized_files + 6;
-$n_tests += (3 * @to_linearize * 5) + 6;
+$n_tests += (3 * @to_linearize * 5) + 7;
foreach my $base (@linearized_files)
{
$td->runtest("dump linearization: $base",
{$td->COMMAND => "qpdf --show-linearization $base.pdf"},
{$td->FILE => "$base.out",
- $td->EXIT_STATUS => 0},
+ $td->EXIT_STATUS => ($base eq 'lin0' ? 0 : 3)},
$td->NORMALIZE_NEWLINES);
}
@@ -129,5 +129,10 @@ foreach my $base (@to_linearize)
}
}
+$td->runtest("suppress linearization warnings",
+ {$td->COMMAND => "qpdf --no-warn --check lin3.pdf"},
+ {$td->FILE => "lin3-check-nowarn.out", $td->EXIT_STATUS => 3},
+ $td->NORMALIZE_NEWLINES);
+
cleanup();
$td->report($n_tests);
diff --git a/qpdf/qtest/qpdf/badlin1.out b/qpdf/qtest/qpdf/badlin1.out
index e61a201f..2f709ace 100644
--- a/qpdf/qtest/qpdf/badlin1.out
+++ b/qpdf/qtest/qpdf/badlin1.out
@@ -1,8 +1,8 @@
-WARNING: first page object (/O) mismatch
-WARNING: space before first xref item (/T) mismatch (computed = 11777; file = 11771
-WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 62: in hint table but not computed list
+WARNING: badlin1.pdf: first page object (/O) mismatch
+WARNING: badlin1.pdf: space before first xref item (/T) mismatch (computed = 11777; file = 11771
+WARNING: badlin1.pdf: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
+WARNING: badlin1.pdf: page 0 has shared identifier entries
+WARNING: badlin1.pdf: page 0: shared object 62: in hint table but not computed list
badlin1.pdf: linearization data:
file_size: 13103
@@ -378,3 +378,4 @@ first_object: 66
first_object_offset: 1827
nobjects: 12
group_length: 2064
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin1.out b/qpdf/qtest/qpdf/lin1.out
index d97842bc..d3588107 100644
--- a/qpdf/qtest/qpdf/lin1.out
+++ b/qpdf/qtest/qpdf/lin1.out
@@ -1,6 +1,6 @@
-WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 62: in hint table but not computed list
+WARNING: lin1.pdf: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
+WARNING: lin1.pdf: page 0 has shared identifier entries
+WARNING: lin1.pdf: page 0: shared object 62: in hint table but not computed list
lin1.pdf: linearization data:
file_size: 13103
@@ -376,3 +376,4 @@ first_object: 66
first_object_offset: 1827
nobjects: 12
group_length: 2064
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin2.out b/qpdf/qtest/qpdf/lin2.out
index 4be08814..db9388e2 100644
--- a/qpdf/qtest/qpdf/lin2.out
+++ b/qpdf/qtest/qpdf/lin2.out
@@ -1,6 +1,6 @@
-WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 62: in hint table but not computed list
+WARNING: lin2.pdf: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891
+WARNING: lin2.pdf: page 0 has shared identifier entries
+WARNING: lin2.pdf: page 0: shared object 62: in hint table but not computed list
lin2.pdf: linearization data:
file_size: 13103
@@ -376,3 +376,4 @@ first_object: 66
first_object_offset: 1827
nobjects: 12
group_length: 2064
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin3-check-nowarn.out b/qpdf/qtest/qpdf/lin3-check-nowarn.out
new file mode 100644
index 00000000..0c1621f9
--- /dev/null
+++ b/qpdf/qtest/qpdf/lin3-check-nowarn.out
@@ -0,0 +1,4 @@
+checking lin3.pdf
+PDF Version: 1.3
+File is not encrypted
+File is linearized
diff --git a/qpdf/qtest/qpdf/lin3.out b/qpdf/qtest/qpdf/lin3.out
index 468cfa59..d09aebef 100644
--- a/qpdf/qtest/qpdf/lin3.out
+++ b/qpdf/qtest/qpdf/lin3.out
@@ -1,64 +1,64 @@
-WARNING: end of first page section (/E) mismatch: /E = 3978; computed = 3785..3786
-WARNING: page 1: shared object 107: in computed list but not hint table
-WARNING: page 1: shared object 109: in computed list but not hint table
-WARNING: page 2: shared object 107: in computed list but not hint table
-WARNING: page 2: shared object 109: in computed list but not hint table
-WARNING: page 3: shared object 107: in computed list but not hint table
-WARNING: page 3: shared object 109: in computed list but not hint table
-WARNING: page 4: shared object 107: in computed list but not hint table
-WARNING: page 4: shared object 109: in computed list but not hint table
-WARNING: page 5: shared object 107: in computed list but not hint table
-WARNING: page 5: shared object 109: in computed list but not hint table
-WARNING: page 6: shared object 107: in computed list but not hint table
-WARNING: page 6: shared object 109: in computed list but not hint table
-WARNING: page 7: shared object 107: in computed list but not hint table
-WARNING: page 7: shared object 109: in computed list but not hint table
-WARNING: page 8: shared object 107: in computed list but not hint table
-WARNING: page 8: shared object 109: in computed list but not hint table
-WARNING: page 9: shared object 107: in computed list but not hint table
-WARNING: page 9: shared object 109: in computed list but not hint table
-WARNING: page 10: shared object 107: in computed list but not hint table
-WARNING: page 10: shared object 109: in computed list but not hint table
-WARNING: page 11: shared object 107: in computed list but not hint table
-WARNING: page 11: shared object 109: in computed list but not hint table
-WARNING: page 12: shared object 107: in computed list but not hint table
-WARNING: page 12: shared object 109: in computed list but not hint table
-WARNING: page 13: shared object 107: in computed list but not hint table
-WARNING: page 13: shared object 109: in computed list but not hint table
-WARNING: page 14: shared object 107: in computed list but not hint table
-WARNING: page 14: shared object 109: in computed list but not hint table
-WARNING: page 15: shared object 107: in computed list but not hint table
-WARNING: page 15: shared object 109: in computed list but not hint table
-WARNING: page 16: shared object 107: in computed list but not hint table
-WARNING: page 16: shared object 109: in computed list but not hint table
-WARNING: page 17: shared object 107: in computed list but not hint table
-WARNING: page 17: shared object 109: in computed list but not hint table
-WARNING: page 18: shared object 107: in computed list but not hint table
-WARNING: page 18: shared object 109: in computed list but not hint table
-WARNING: page 19: shared object 107: in computed list but not hint table
-WARNING: page 19: shared object 109: in computed list but not hint table
-WARNING: page 20: shared object 107: in computed list but not hint table
-WARNING: page 20: shared object 109: in computed list but not hint table
-WARNING: page 21: shared object 107: in computed list but not hint table
-WARNING: page 21: shared object 109: in computed list but not hint table
-WARNING: page 22: shared object 107: in computed list but not hint table
-WARNING: page 22: shared object 109: in computed list but not hint table
-WARNING: page 23: shared object 107: in computed list but not hint table
-WARNING: page 23: shared object 109: in computed list but not hint table
-WARNING: page 24: shared object 107: in computed list but not hint table
-WARNING: page 24: shared object 109: in computed list but not hint table
-WARNING: page 25: shared object 107: in computed list but not hint table
-WARNING: page 25: shared object 109: in computed list but not hint table
-WARNING: page 26: shared object 107: in computed list but not hint table
-WARNING: page 26: shared object 109: in computed list but not hint table
-WARNING: page 27: shared object 107: in computed list but not hint table
-WARNING: page 27: shared object 109: in computed list but not hint table
-WARNING: page 28: shared object 107: in computed list but not hint table
-WARNING: page 28: shared object 109: in computed list but not hint table
-WARNING: page 29: shared object 107: in computed list but not hint table
-WARNING: page 29: shared object 109: in computed list but not hint table
-WARNING: incorrect offset in outlines table: hint table = 1627; computed = 1547
-WARNING: incorrect length in outlines table: hint table = 1988; computed = 1936
+WARNING: lin3.pdf: end of first page section (/E) mismatch: /E = 3978; computed = 3785..3786
+WARNING: lin3.pdf: page 1: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 1: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 2: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 2: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 3: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 3: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 4: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 4: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 5: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 5: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 6: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 6: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 7: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 7: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 8: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 8: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 9: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 9: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 10: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 10: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 11: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 11: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 12: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 12: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 13: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 13: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 14: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 14: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 15: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 15: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 16: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 16: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 17: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 17: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 18: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 18: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 19: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 19: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 20: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 20: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 21: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 21: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 22: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 22: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 23: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 23: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 24: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 24: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 25: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 25: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 26: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 26: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 27: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 27: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 28: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 28: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: page 29: shared object 107: in computed list but not hint table
+WARNING: lin3.pdf: page 29: shared object 109: in computed list but not hint table
+WARNING: lin3.pdf: incorrect offset in outlines table: hint table = 1627; computed = 1547
+WARNING: lin3.pdf: incorrect length in outlines table: hint table = 1988; computed = 1936
lin3.pdf: linearization data:
file_size: 16937
@@ -316,3 +316,4 @@ first_object: 94
first_object_offset: 1627
nobjects: 12
group_length: 1988
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin4.out b/qpdf/qtest/qpdf/lin4.out
index 42c6282e..5fa06e71 100644
--- a/qpdf/qtest/qpdf/lin4.out
+++ b/qpdf/qtest/qpdf/lin4.out
@@ -1,5 +1,5 @@
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 74: in hint table but not computed list
+WARNING: lin4.pdf: page 0 has shared identifier entries
+WARNING: lin4.pdf: page 0: shared object 74: in hint table but not computed list
lin4.pdf: linearization data:
file_size: 13055
@@ -351,3 +351,4 @@ first_object: 60
first_object_offset: 9413
nobjects: 12
group_length: 2064
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin5.out b/qpdf/qtest/qpdf/lin5.out
index b2261a1b..875f1dca 100644
--- a/qpdf/qtest/qpdf/lin5.out
+++ b/qpdf/qtest/qpdf/lin5.out
@@ -1,64 +1,64 @@
-WARNING: end of first page section (/E) mismatch: /E = 4213; computed = 4004..4005
-WARNING: page 1: shared object 170: in computed list but not hint table
-WARNING: page 1: shared object 172: in computed list but not hint table
-WARNING: page 2: shared object 170: in computed list but not hint table
-WARNING: page 2: shared object 172: in computed list but not hint table
-WARNING: page 3: shared object 170: in computed list but not hint table
-WARNING: page 3: shared object 172: in computed list but not hint table
-WARNING: page 4: shared object 170: in computed list but not hint table
-WARNING: page 4: shared object 172: in computed list but not hint table
-WARNING: page 5: shared object 170: in computed list but not hint table
-WARNING: page 5: shared object 172: in computed list but not hint table
-WARNING: page 6: shared object 170: in computed list but not hint table
-WARNING: page 6: shared object 172: in computed list but not hint table
-WARNING: page 7: shared object 170: in computed list but not hint table
-WARNING: page 7: shared object 172: in computed list but not hint table
-WARNING: page 8: shared object 170: in computed list but not hint table
-WARNING: page 8: shared object 172: in computed list but not hint table
-WARNING: page 9: shared object 170: in computed list but not hint table
-WARNING: page 9: shared object 172: in computed list but not hint table
-WARNING: page 10: shared object 170: in computed list but not hint table
-WARNING: page 10: shared object 172: in computed list but not hint table
-WARNING: page 11: shared object 170: in computed list but not hint table
-WARNING: page 11: shared object 172: in computed list but not hint table
-WARNING: page 12: shared object 170: in computed list but not hint table
-WARNING: page 12: shared object 172: in computed list but not hint table
-WARNING: page 13: shared object 170: in computed list but not hint table
-WARNING: page 13: shared object 172: in computed list but not hint table
-WARNING: page 14: shared object 170: in computed list but not hint table
-WARNING: page 14: shared object 172: in computed list but not hint table
-WARNING: page 15: shared object 170: in computed list but not hint table
-WARNING: page 15: shared object 172: in computed list but not hint table
-WARNING: page 16: shared object 170: in computed list but not hint table
-WARNING: page 16: shared object 172: in computed list but not hint table
-WARNING: page 17: shared object 170: in computed list but not hint table
-WARNING: page 17: shared object 172: in computed list but not hint table
-WARNING: page 18: shared object 170: in computed list but not hint table
-WARNING: page 18: shared object 172: in computed list but not hint table
-WARNING: page 19: shared object 170: in computed list but not hint table
-WARNING: page 19: shared object 172: in computed list but not hint table
-WARNING: page 20: shared object 170: in computed list but not hint table
-WARNING: page 20: shared object 172: in computed list but not hint table
-WARNING: page 21: shared object 170: in computed list but not hint table
-WARNING: page 21: shared object 172: in computed list but not hint table
-WARNING: page 22: shared object 170: in computed list but not hint table
-WARNING: page 22: shared object 172: in computed list but not hint table
-WARNING: page 23: shared object 170: in computed list but not hint table
-WARNING: page 23: shared object 172: in computed list but not hint table
-WARNING: page 24: shared object 170: in computed list but not hint table
-WARNING: page 24: shared object 172: in computed list but not hint table
-WARNING: page 25: shared object 170: in computed list but not hint table
-WARNING: page 25: shared object 172: in computed list but not hint table
-WARNING: page 26: shared object 170: in computed list but not hint table
-WARNING: page 26: shared object 172: in computed list but not hint table
-WARNING: page 27: shared object 170: in computed list but not hint table
-WARNING: page 27: shared object 172: in computed list but not hint table
-WARNING: page 28: shared object 170: in computed list but not hint table
-WARNING: page 28: shared object 172: in computed list but not hint table
-WARNING: page 29: shared object 170: in computed list but not hint table
-WARNING: page 29: shared object 172: in computed list but not hint table
-WARNING: incorrect offset in outlines table: hint table = 1710; computed = 1627
-WARNING: incorrect length in outlines table: hint table = 2124; computed = 2075
+WARNING: lin5.pdf: end of first page section (/E) mismatch: /E = 4213; computed = 4004..4005
+WARNING: lin5.pdf: page 1: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 1: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 2: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 2: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 3: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 3: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 4: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 4: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 5: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 5: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 6: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 6: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 7: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 7: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 8: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 8: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 9: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 9: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 10: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 10: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 11: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 11: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 12: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 12: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 13: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 13: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 14: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 14: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 15: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 15: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 16: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 16: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 17: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 17: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 18: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 18: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 19: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 19: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 20: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 20: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 21: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 21: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 22: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 22: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 23: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 23: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 24: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 24: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 25: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 25: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 26: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 26: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 27: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 27: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 28: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 28: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: page 29: shared object 170: in computed list but not hint table
+WARNING: lin5.pdf: page 29: shared object 172: in computed list but not hint table
+WARNING: lin5.pdf: incorrect offset in outlines table: hint table = 1710; computed = 1627
+WARNING: lin5.pdf: incorrect length in outlines table: hint table = 2124; computed = 2075
lin5.pdf: linearization data:
file_size: 27464
@@ -316,3 +316,4 @@ first_object: 157
first_object_offset: 1710
nobjects: 12
group_length: 2124
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin6.out b/qpdf/qtest/qpdf/lin6.out
index 3ed08aa8..0b4fafe0 100644
--- a/qpdf/qtest/qpdf/lin6.out
+++ b/qpdf/qtest/qpdf/lin6.out
@@ -1,94 +1,94 @@
-WARNING: end of first page section (/E) mismatch: /E = 2897; computed = 5005..5007
-WARNING: object count mismatch for page 0: hint table = 19; computed = 16
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 93: in hint table but not computed list
-WARNING: object count mismatch for page 1: hint table = 3; computed = 2
-WARNING: page 1: shared object 98: in hint table but not computed list
-WARNING: page 1: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 2: hint table = 3; computed = 2
-WARNING: page 2: shared object 98: in hint table but not computed list
-WARNING: page 2: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 3: hint table = 3; computed = 2
-WARNING: page 3: shared object 98: in hint table but not computed list
-WARNING: page 3: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 4: hint table = 3; computed = 2
-WARNING: page 4: shared object 98: in hint table but not computed list
-WARNING: page 4: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 5: hint table = 3; computed = 2
-WARNING: page 5: shared object 98: in hint table but not computed list
-WARNING: page 5: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 6: hint table = 3; computed = 2
-WARNING: page 6: shared object 98: in hint table but not computed list
-WARNING: page 6: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 7: hint table = 3; computed = 2
-WARNING: page 7: shared object 98: in hint table but not computed list
-WARNING: page 7: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 8: hint table = 3; computed = 2
-WARNING: page 8: shared object 98: in hint table but not computed list
-WARNING: page 8: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 9: hint table = 3; computed = 2
-WARNING: page 9: shared object 98: in hint table but not computed list
-WARNING: page 9: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 10: hint table = 3; computed = 2
-WARNING: page 10: shared object 98: in hint table but not computed list
-WARNING: page 10: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 11: hint table = 3; computed = 2
-WARNING: page 11: shared object 98: in hint table but not computed list
-WARNING: page 11: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 12: hint table = 3; computed = 2
-WARNING: page 12: shared object 98: in hint table but not computed list
-WARNING: page 12: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 13: hint table = 3; computed = 2
-WARNING: page 13: shared object 98: in hint table but not computed list
-WARNING: page 13: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 14: hint table = 3; computed = 2
-WARNING: page 14: shared object 98: in hint table but not computed list
-WARNING: page 14: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 15: hint table = 3; computed = 2
-WARNING: page 15: shared object 98: in hint table but not computed list
-WARNING: page 15: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 16: hint table = 3; computed = 2
-WARNING: page 16: shared object 98: in hint table but not computed list
-WARNING: page 16: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 17: hint table = 3; computed = 2
-WARNING: page 17: shared object 98: in hint table but not computed list
-WARNING: page 17: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 18: hint table = 3; computed = 2
-WARNING: page 18: shared object 98: in hint table but not computed list
-WARNING: page 18: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 19: hint table = 3; computed = 2
-WARNING: page 19: shared object 98: in hint table but not computed list
-WARNING: page 19: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 20: hint table = 3; computed = 2
-WARNING: page 20: shared object 98: in hint table but not computed list
-WARNING: page 20: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 21: hint table = 3; computed = 2
-WARNING: page 21: shared object 98: in hint table but not computed list
-WARNING: page 21: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 22: hint table = 3; computed = 2
-WARNING: page 22: shared object 98: in hint table but not computed list
-WARNING: page 22: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 23: hint table = 3; computed = 2
-WARNING: page 23: shared object 98: in hint table but not computed list
-WARNING: page 23: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 24: hint table = 3; computed = 2
-WARNING: page 24: shared object 98: in hint table but not computed list
-WARNING: page 24: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 25: hint table = 3; computed = 2
-WARNING: page 25: shared object 98: in hint table but not computed list
-WARNING: page 25: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 26: hint table = 3; computed = 2
-WARNING: page 26: shared object 98: in hint table but not computed list
-WARNING: page 26: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 27: hint table = 3; computed = 2
-WARNING: page 27: shared object 98: in hint table but not computed list
-WARNING: page 27: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 28: hint table = 3; computed = 2
-WARNING: page 28: shared object 98: in hint table but not computed list
-WARNING: page 28: shared object 99: in hint table but not computed list
-WARNING: object count mismatch for page 29: hint table = 3; computed = 2
-WARNING: page 29: shared object 98: in hint table but not computed list
-WARNING: page 29: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: end of first page section (/E) mismatch: /E = 2897; computed = 5005..5007
+WARNING: lin6.pdf: object count mismatch for page 0: hint table = 19; computed = 16
+WARNING: lin6.pdf: page 0 has shared identifier entries
+WARNING: lin6.pdf: page 0: shared object 93: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 1: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 1: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 1: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 2: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 2: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 2: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 3: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 3: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 3: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 4: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 4: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 4: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 5: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 5: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 5: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 6: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 6: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 6: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 7: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 7: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 7: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 8: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 8: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 8: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 9: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 9: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 9: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 10: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 10: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 10: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 11: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 11: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 11: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 12: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 12: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 12: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 13: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 13: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 13: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 14: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 14: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 14: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 15: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 15: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 15: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 16: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 16: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 16: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 17: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 17: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 17: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 18: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 18: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 18: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 19: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 19: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 19: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 20: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 20: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 20: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 21: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 21: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 21: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 22: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 22: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 22: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 23: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 23: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 23: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 24: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 24: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 24: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 25: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 25: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 25: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 26: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 26: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 26: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 27: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 27: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 27: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 28: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 28: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 28: shared object 99: in hint table but not computed list
+WARNING: lin6.pdf: object count mismatch for page 29: hint table = 3; computed = 2
+WARNING: lin6.pdf: page 29: shared object 98: in hint table but not computed list
+WARNING: lin6.pdf: page 29: shared object 99: in hint table but not computed list
lin6.pdf: linearization data:
file_size: 24824
@@ -590,3 +590,4 @@ first_object: 100
first_object_offset: 2897
nobjects: 12
group_length: 2110
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin7.out b/qpdf/qtest/qpdf/lin7.out
index c98d172a..09a663a1 100644
--- a/qpdf/qtest/qpdf/lin7.out
+++ b/qpdf/qtest/qpdf/lin7.out
@@ -1,62 +1,62 @@
-WARNING: end of first page section (/E) mismatch: /E = 1865; computed = 1655..1656
-WARNING: page 1: shared object 170: in computed list but not hint table
-WARNING: page 1: shared object 172: in computed list but not hint table
-WARNING: page 2: shared object 170: in computed list but not hint table
-WARNING: page 2: shared object 172: in computed list but not hint table
-WARNING: page 3: shared object 170: in computed list but not hint table
-WARNING: page 3: shared object 172: in computed list but not hint table
-WARNING: page 4: shared object 170: in computed list but not hint table
-WARNING: page 4: shared object 172: in computed list but not hint table
-WARNING: page 5: shared object 170: in computed list but not hint table
-WARNING: page 5: shared object 172: in computed list but not hint table
-WARNING: page 6: shared object 170: in computed list but not hint table
-WARNING: page 6: shared object 172: in computed list but not hint table
-WARNING: page 7: shared object 170: in computed list but not hint table
-WARNING: page 7: shared object 172: in computed list but not hint table
-WARNING: page 8: shared object 170: in computed list but not hint table
-WARNING: page 8: shared object 172: in computed list but not hint table
-WARNING: page 9: shared object 170: in computed list but not hint table
-WARNING: page 9: shared object 172: in computed list but not hint table
-WARNING: page 10: shared object 170: in computed list but not hint table
-WARNING: page 10: shared object 172: in computed list but not hint table
-WARNING: page 11: shared object 170: in computed list but not hint table
-WARNING: page 11: shared object 172: in computed list but not hint table
-WARNING: page 12: shared object 170: in computed list but not hint table
-WARNING: page 12: shared object 172: in computed list but not hint table
-WARNING: page 13: shared object 170: in computed list but not hint table
-WARNING: page 13: shared object 172: in computed list but not hint table
-WARNING: page 14: shared object 170: in computed list but not hint table
-WARNING: page 14: shared object 172: in computed list but not hint table
-WARNING: page 15: shared object 170: in computed list but not hint table
-WARNING: page 15: shared object 172: in computed list but not hint table
-WARNING: page 16: shared object 170: in computed list but not hint table
-WARNING: page 16: shared object 172: in computed list but not hint table
-WARNING: page 17: shared object 170: in computed list but not hint table
-WARNING: page 17: shared object 172: in computed list but not hint table
-WARNING: page 18: shared object 170: in computed list but not hint table
-WARNING: page 18: shared object 172: in computed list but not hint table
-WARNING: page 19: shared object 170: in computed list but not hint table
-WARNING: page 19: shared object 172: in computed list but not hint table
-WARNING: page 20: shared object 170: in computed list but not hint table
-WARNING: page 20: shared object 172: in computed list but not hint table
-WARNING: page 21: shared object 170: in computed list but not hint table
-WARNING: page 21: shared object 172: in computed list but not hint table
-WARNING: page 22: shared object 170: in computed list but not hint table
-WARNING: page 22: shared object 172: in computed list but not hint table
-WARNING: page 23: shared object 170: in computed list but not hint table
-WARNING: page 23: shared object 172: in computed list but not hint table
-WARNING: page 24: shared object 170: in computed list but not hint table
-WARNING: page 24: shared object 172: in computed list but not hint table
-WARNING: page 25: shared object 170: in computed list but not hint table
-WARNING: page 25: shared object 172: in computed list but not hint table
-WARNING: page 26: shared object 170: in computed list but not hint table
-WARNING: page 26: shared object 172: in computed list but not hint table
-WARNING: page 27: shared object 170: in computed list but not hint table
-WARNING: page 27: shared object 172: in computed list but not hint table
-WARNING: page 28: shared object 170: in computed list but not hint table
-WARNING: page 28: shared object 172: in computed list but not hint table
-WARNING: page 29: shared object 170: in computed list but not hint table
-WARNING: page 29: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: end of first page section (/E) mismatch: /E = 1865; computed = 1655..1656
+WARNING: lin7.pdf: page 1: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 1: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 2: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 2: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 3: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 3: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 4: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 4: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 5: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 5: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 6: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 6: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 7: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 7: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 8: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 8: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 9: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 9: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 10: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 10: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 11: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 11: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 12: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 12: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 13: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 13: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 14: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 14: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 15: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 15: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 16: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 16: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 17: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 17: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 18: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 18: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 19: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 19: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 20: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 20: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 21: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 21: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 22: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 22: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 23: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 23: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 24: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 24: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 25: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 25: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 26: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 26: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 27: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 27: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 28: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 28: shared object 172: in computed list but not hint table
+WARNING: lin7.pdf: page 29: shared object 170: in computed list but not hint table
+WARNING: lin7.pdf: page 29: shared object 172: in computed list but not hint table
lin7.pdf: linearization data:
file_size: 27408
@@ -290,3 +290,4 @@ first_object: 88
first_object_offset: 12129
nobjects: 12
group_length: 2030
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin8.out b/qpdf/qtest/qpdf/lin8.out
index 696b759c..5290a34c 100644
--- a/qpdf/qtest/qpdf/lin8.out
+++ b/qpdf/qtest/qpdf/lin8.out
@@ -1,94 +1,94 @@
-WARNING: end of first page section (/E) mismatch: /E = 2656; computed = 1768..1770
-WARNING: object count mismatch for page 0: hint table = 7; computed = 4
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 105: in hint table but not computed list
-WARNING: object count mismatch for page 1: hint table = 3; computed = 2
-WARNING: page 1: shared object 110: in hint table but not computed list
-WARNING: page 1: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 2: hint table = 3; computed = 2
-WARNING: page 2: shared object 110: in hint table but not computed list
-WARNING: page 2: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 3: hint table = 3; computed = 2
-WARNING: page 3: shared object 110: in hint table but not computed list
-WARNING: page 3: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 4: hint table = 3; computed = 2
-WARNING: page 4: shared object 110: in hint table but not computed list
-WARNING: page 4: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 5: hint table = 3; computed = 2
-WARNING: page 5: shared object 110: in hint table but not computed list
-WARNING: page 5: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 6: hint table = 3; computed = 2
-WARNING: page 6: shared object 110: in hint table but not computed list
-WARNING: page 6: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 7: hint table = 3; computed = 2
-WARNING: page 7: shared object 110: in hint table but not computed list
-WARNING: page 7: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 8: hint table = 3; computed = 2
-WARNING: page 8: shared object 110: in hint table but not computed list
-WARNING: page 8: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 9: hint table = 3; computed = 2
-WARNING: page 9: shared object 110: in hint table but not computed list
-WARNING: page 9: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 10: hint table = 3; computed = 2
-WARNING: page 10: shared object 110: in hint table but not computed list
-WARNING: page 10: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 11: hint table = 3; computed = 2
-WARNING: page 11: shared object 110: in hint table but not computed list
-WARNING: page 11: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 12: hint table = 3; computed = 2
-WARNING: page 12: shared object 110: in hint table but not computed list
-WARNING: page 12: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 13: hint table = 3; computed = 2
-WARNING: page 13: shared object 110: in hint table but not computed list
-WARNING: page 13: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 14: hint table = 3; computed = 2
-WARNING: page 14: shared object 110: in hint table but not computed list
-WARNING: page 14: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 15: hint table = 3; computed = 2
-WARNING: page 15: shared object 110: in hint table but not computed list
-WARNING: page 15: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 16: hint table = 3; computed = 2
-WARNING: page 16: shared object 110: in hint table but not computed list
-WARNING: page 16: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 17: hint table = 3; computed = 2
-WARNING: page 17: shared object 110: in hint table but not computed list
-WARNING: page 17: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 18: hint table = 3; computed = 2
-WARNING: page 18: shared object 110: in hint table but not computed list
-WARNING: page 18: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 19: hint table = 3; computed = 2
-WARNING: page 19: shared object 110: in hint table but not computed list
-WARNING: page 19: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 20: hint table = 3; computed = 2
-WARNING: page 20: shared object 110: in hint table but not computed list
-WARNING: page 20: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 21: hint table = 3; computed = 2
-WARNING: page 21: shared object 110: in hint table but not computed list
-WARNING: page 21: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 22: hint table = 3; computed = 2
-WARNING: page 22: shared object 110: in hint table but not computed list
-WARNING: page 22: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 23: hint table = 3; computed = 2
-WARNING: page 23: shared object 110: in hint table but not computed list
-WARNING: page 23: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 24: hint table = 3; computed = 2
-WARNING: page 24: shared object 110: in hint table but not computed list
-WARNING: page 24: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 25: hint table = 3; computed = 2
-WARNING: page 25: shared object 110: in hint table but not computed list
-WARNING: page 25: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 26: hint table = 3; computed = 2
-WARNING: page 26: shared object 110: in hint table but not computed list
-WARNING: page 26: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 27: hint table = 3; computed = 2
-WARNING: page 27: shared object 110: in hint table but not computed list
-WARNING: page 27: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 28: hint table = 3; computed = 2
-WARNING: page 28: shared object 110: in hint table but not computed list
-WARNING: page 28: shared object 111: in hint table but not computed list
-WARNING: object count mismatch for page 29: hint table = 3; computed = 2
-WARNING: page 29: shared object 110: in hint table but not computed list
-WARNING: page 29: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: end of first page section (/E) mismatch: /E = 2656; computed = 1768..1770
+WARNING: lin8.pdf: object count mismatch for page 0: hint table = 7; computed = 4
+WARNING: lin8.pdf: page 0 has shared identifier entries
+WARNING: lin8.pdf: page 0: shared object 105: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 1: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 1: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 1: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 2: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 2: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 2: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 3: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 3: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 3: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 4: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 4: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 4: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 5: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 5: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 5: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 6: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 6: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 6: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 7: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 7: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 7: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 8: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 8: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 8: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 9: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 9: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 9: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 10: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 10: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 10: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 11: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 11: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 11: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 12: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 12: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 12: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 13: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 13: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 13: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 14: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 14: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 14: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 15: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 15: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 15: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 16: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 16: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 16: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 17: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 17: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 17: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 18: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 18: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 18: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 19: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 19: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 19: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 20: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 20: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 20: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 21: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 21: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 21: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 22: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 22: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 22: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 23: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 23: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 23: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 24: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 24: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 24: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 25: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 25: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 25: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 26: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 26: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 26: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 27: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 27: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 27: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 28: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 28: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 28: shared object 111: in hint table but not computed list
+WARNING: lin8.pdf: object count mismatch for page 29: hint table = 3; computed = 2
+WARNING: lin8.pdf: page 29: shared object 110: in hint table but not computed list
+WARNING: lin8.pdf: page 29: shared object 111: in hint table but not computed list
lin8.pdf: linearization data:
file_size: 24875
@@ -566,3 +566,4 @@ first_object: 89
first_object_offset: 20067
nobjects: 12
group_length: 2069
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/lin9.out b/qpdf/qtest/qpdf/lin9.out
index 6fde8441..f6d57c78 100644
--- a/qpdf/qtest/qpdf/lin9.out
+++ b/qpdf/qtest/qpdf/lin9.out
@@ -1,5 +1,5 @@
-WARNING: page 0 has shared identifier entries
-WARNING: page 0: shared object 19: in hint table but not computed list
+WARNING: lin9.pdf: page 0 has shared identifier entries
+WARNING: lin9.pdf: page 0: shared object 19: in hint table but not computed list
lin9.pdf: linearization data:
file_size: 3316
@@ -102,3 +102,4 @@ Shared Object 5:
group length: 67
Shared Object 6:
group length: 117
+qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/linearization-bounds-1.out b/qpdf/qtest/qpdf/linearization-bounds-1.out
index ff81a903..0f318de9 100644
--- a/qpdf/qtest/qpdf/linearization-bounds-1.out
+++ b/qpdf/qtest/qpdf/linearization-bounds-1.out
@@ -5,5 +5,5 @@ File is linearized
WARNING: linearization-bounds-1.pdf (linearization hint stream: object 62 0, offset 12302): expected endstream
WARNING: linearization-bounds-1.pdf (linearization hint stream: object 62 0, offset 1183): attempting to recover stream length
WARNING: linearization-bounds-1.pdf (linearization hint stream: object 62 0, offset 1183): recovered stream length: 106
-WARNING: error encountered while checking linearization data: linearization-bounds-1.pdf (linearization hint table, offset 1183): /S (shared object) offset is out of bounds
+WARNING: linearization-bounds-1.pdf: error encountered while checking linearization data: linearization-bounds-1.pdf (linearization hint table, offset 1183): /S (shared object) offset is out of bounds
qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/linearization-bounds-2.out b/qpdf/qtest/qpdf/linearization-bounds-2.out
index b7386ab3..4fbe519a 100644
--- a/qpdf/qtest/qpdf/linearization-bounds-2.out
+++ b/qpdf/qtest/qpdf/linearization-bounds-2.out
@@ -5,5 +5,5 @@ File is linearized
WARNING: linearization-bounds-2.pdf (linearization hint stream: object 62 0, offset 1282): expected endstream
WARNING: linearization-bounds-2.pdf (linearization hint stream: object 62 0, offset 1183): attempting to recover stream length
WARNING: linearization-bounds-2.pdf (linearization hint stream: object 62 0, offset 1183): recovered stream length: 106
-WARNING: error encountered while checking linearization data: linearization-bounds-2.pdf (linearization hint table, offset 1183): /S (shared object) offset is out of bounds
+WARNING: linearization-bounds-2.pdf: error encountered while checking linearization data: linearization-bounds-2.pdf (linearization hint table, offset 1183): /S (shared object) offset is out of bounds
qpdf: operation succeeded with warnings
diff --git a/qpdf/qtest/qpdf/linearization-large-vector-alloc.out b/qpdf/qtest/qpdf/linearization-large-vector-alloc.out
index 66ee998c..7e323f49 100644
--- a/qpdf/qtest/qpdf/linearization-large-vector-alloc.out
+++ b/qpdf/qtest/qpdf/linearization-large-vector-alloc.out
@@ -5,5 +5,5 @@ File is linearized
WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, offset 1282): expected endstream
WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, offset 1183): attempting to recover stream length
WARNING: linearization-large-vector-alloc.pdf (linearization hint stream: object 62 0, offset 1183): recovered stream length: 106
-WARNING: error encountered while checking linearization data: overflow reading bit stream: wanted = 12556; available = 968
+WARNING: linearization-large-vector-alloc.pdf: error encountered while checking linearization data: overflow reading bit stream: wanted = 12556; available = 968
qpdf: operation succeeded with warnings