aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2020-01-26 22:43:55 +0100
committerJay Berkenbilt <ejb@ql.org>2020-01-26 22:50:57 +0100
commit57c01ef81ff11b208188bbdedc98b6ce20c786b3 (patch)
tree164cd1ba4e8e5f911f7ef860068d68b39831231f /libqpdf
parentbbc2f8ffae939eab598f583514fb132d23c11705 (diff)
downloadqpdf-57c01ef81ff11b208188bbdedc98b6ce20c786b3.tar.zst
In qdf mode, don't write extra XRef streams (fixes #386)
fix-qdf assumes there is exactly one XRef stream and that it is at the end of the file.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFWriter.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 7b769ae4..5f97117d 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -1241,6 +1241,21 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object)
" another file.");
}
+ if (this->m->qdf_mode &&
+ object.isStream() && object.getDict().getKey("/Type").isName() &&
+ (object.getDict().getKey("/Type").getName() == "/XRef"))
+ {
+ // As a special case, do not output any extraneous XRef
+ // streams in QDF mode. Doing so will confuse fix-qdf,
+ // which expects to see only one XRef stream at the end of
+ // the file. This case can occur when creating a QDF from
+ // a file with object streams when preserving unreferenced
+ // objects since the old cross reference streams are not
+ // actually referenced by object number.
+ QTC::TC("qpdf", "QPDFWriter ignore XRef in qdf mode");
+ return;
+ }
+
QPDFObjGen og = object.getObjGen();
if (this->m->obj_renumber.count(og) == 0)