From fc4c82a9501d13a398682c308fc24c4427cfd77e Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Thu, 6 Sep 2012 15:28:16 -0400 Subject: [PATCH] Reset state in QPDF::calculateLinearizationData This makes it possible to use two different writers to write linearized files from the same QPDF object. --- ChangeLog | 5 +++++ libqpdf/QPDF_linearization.cc | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index ec165929..ad86b396 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-09-06 Jay Berkenbilt + * Make it possible to write the same QPDF object with two + different QPDFWriter objects that have both called + setLinearization(true) by making private method + QPDF::calculateLinearizationData() properly initialize its state. + * Bug fix: Writing after calling QPDFWriter::setOutputMemory() would cause a segmentation fault because of an internal field not being initialized, rendering that method useless. This has been diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc index fdd0d702..65f2b99e 100644 --- a/libqpdf/QPDF_linearization.cc +++ b/libqpdf/QPDF_linearization.cc @@ -1241,6 +1241,16 @@ QPDF::calculateLinearizationData(std::map const& object_stream_data) // * outlines: part 6 or 9 + this->part4.clear(); + this->part6.clear(); + this->part7.clear(); + this->part8.clear(); + this->part9.clear(); + this->c_linp = LinParameters(); + this->c_page_offset_data = CHPageOffset(); + this->c_shared_object_data = CHSharedObject(); + this->c_outline_data = HGeneric(); + QPDFObjectHandle root = getRoot(); bool outlines_in_first_page = false; QPDFObjectHandle pagemode = root.getKey("/PageMode");