Commit 570db9b60b64b91d875f1b838826a7b2e21079b4

Authored by Jay Berkenbilt
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);