diff options
author | Jay Berkenbilt <ejb@ql.org> | 2018-03-05 20:25:17 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2018-03-05 20:26:58 +0100 |
commit | ee44aef8d08d8f745380277412ec8bb420648a7c (patch) | |
tree | 376c258b3e7c7b449b492f434786ee87d7bbdb3a /libqpdf | |
parent | 6fe1e9de400cf3c86233958d5cef0d2e20b09938 (diff) | |
download | qpdf-ee44aef8d08d8f745380277412ec8bb420648a7c.tar.zst |
Treat loop in xref tables as damage (fixes #192)
Prior to this fix, if there was a loop detected in following /Prev
pointers in xref streams/tables, it would cause qpdf to lose data.
Note that this condition causes many PDF readers to hang or fail.
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 9e30d6db..90e90813 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -532,7 +532,9 @@ QPDF::read_xref(qpdf_offset_t xref_offset) } if (visited.count(xref_offset) != 0) { - xref_offset = 0; + QTC::TC("qpdf", "QPDF xref loop"); + throw QPDFExc(qpdf_e_damaged_pdf, this->m->file->getName(), "", 0, + "loop detected following xref tables"); } } |