From ee44aef8d08d8f745380277412ec8bb420648a7c Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Mon, 5 Mar 2018 14:25:17 -0500 Subject: 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. --- libqpdf/QPDF.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libqpdf/QPDF.cc') 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"); } } -- cgit v1.2.3-70-g09d2