Commit 570db9b60b64b91d875f1b838826a7b2e21079b4
1 parent
b43a0ac2
Catch more exceptions while resolving objects
Showing
1 changed file
with
14 additions
and
1 deletions
libqpdf/QPDF.cc
| @@ -1542,6 +1542,7 @@ QPDF::resolve(int objid, int generation) | @@ -1542,6 +1542,7 @@ QPDF::resolve(int objid, int generation) | ||
| 1542 | } | 1542 | } |
| 1543 | 1543 | ||
| 1544 | QPDFXRefEntry const& entry = this->xref_table[og]; | 1544 | QPDFXRefEntry const& entry = this->xref_table[og]; |
| 1545 | + bool success = false; | ||
| 1545 | try | 1546 | try |
| 1546 | { | 1547 | { |
| 1547 | switch (entry.getType()) | 1548 | switch (entry.getType()) |
| @@ -1569,11 +1570,23 @@ QPDF::resolve(int objid, int generation) | @@ -1569,11 +1570,23 @@ QPDF::resolve(int objid, int generation) | ||
| 1569 | QUtil::int_to_string(generation) + | 1570 | QUtil::int_to_string(generation) + |
| 1570 | " has unexpected xref entry type"); | 1571 | " has unexpected xref entry type"); |
| 1571 | } | 1572 | } |
| 1573 | + success = true; | ||
| 1572 | } | 1574 | } |
| 1573 | catch (QPDFExc& e) | 1575 | catch (QPDFExc& e) |
| 1574 | { | 1576 | { |
| 1575 | - QTC::TC("qpdf", "QPDF resolve failure to null"); | ||
| 1576 | warn(e); | 1577 | warn(e); |
| 1578 | + } | ||
| 1579 | + catch (std::exception& e) | ||
| 1580 | + { | ||
| 1581 | + warn(QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0, | ||
| 1582 | + "object " + | ||
| 1583 | + QUtil::int_to_string(objid) + "/" + | ||
| 1584 | + QUtil::int_to_string(generation) + | ||
| 1585 | + ": error reading object: " + e.what())); | ||
| 1586 | + } | ||
| 1587 | + if (! success) | ||
| 1588 | + { | ||
| 1589 | + QTC::TC("qpdf", "QPDF resolve failure to null"); | ||
| 1577 | QPDFObjectHandle oh = QPDFObjectHandle::newNull(); | 1590 | QPDFObjectHandle oh = QPDFObjectHandle::newNull(); |
| 1578 | this->obj_cache[og] = | 1591 | this->obj_cache[og] = |
| 1579 | ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); | 1592 | ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); |