summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-03-05 20:25:17 +0100
committerJay Berkenbilt <ejb@ql.org>2018-03-05 20:26:58 +0100
commitee44aef8d08d8f745380277412ec8bb420648a7c (patch)
tree376c258b3e7c7b449b492f434786ee87d7bbdb3a /libqpdf/QPDF.cc
parent6fe1e9de400cf3c86233958d5cef0d2e20b09938 (diff)
downloadqpdf-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/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc4
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");
}
}