Commit 4ebe54529cdce132a12f4a205ff7cc7c3641cda0

Authored by m-holger
1 parent a095549e

Fix linearization logic to conditionally add outlines object only if erased, ens…

…uring robustness against damaged PDFs.
Showing 1 changed file with 13 additions and 7 deletions
libqpdf/QPDF_linearization.cc
... ... @@ -1412,14 +1412,20 @@ QPDF::pushOutlinesToPart(
1412 1412 QTC::TC(
1413 1413 "qpdf",
1414 1414 "QPDF lin outlines in part",
1415   - ((&part == (&m->part6)) ? 0
1416   - : (&part == (&m->part9)) ? 1
1417   - : 9999)); // can't happen
1418   - m->c_outline_data.first_object = outlines_og.getObj();
1419   - m->c_outline_data.nobjects = 1;
1420   - lc_outlines.erase(outlines_og);
1421   - part.push_back(outlines);
  1415 + &part == &m->part6 ? 0
  1416 + : (&part == &m->part9) ? 1
  1417 + : 9999); // can't happen
  1418 + if (lc_outlines.erase(outlines_og)) {
  1419 + // Make sure outlines is in lc_outlines in case the file is damaged. in which case it may be
  1420 + // included in an earlier part.
  1421 + part.push_back(outlines);
  1422 + m->c_outline_data.first_object = outlines_og.getObj();
  1423 + m->c_outline_data.nobjects = 1;
  1424 + }
1422 1425 for (auto const& og: lc_outlines) {
  1426 + if (!m->c_outline_data.first_object) {
  1427 + m->c_outline_data.first_object = og.getObj();
  1428 + }
1423 1429 part.push_back(getObject(og));
1424 1430 ++m->c_outline_data.nobjects;
1425 1431 }
... ...