aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2017-08-28 23:05:34 +0200
committerJay Berkenbilt <ejb@ql.org>2017-08-29 04:16:31 +0200
commitc6872d2c700a9d27105debe93662ecaaf8beb3bd (patch)
treee1e4384f22c6823e470da4286140bea7cd0a272d
parentc16aa1aca7c56de4bd54976dab7edf600c8c1e29 (diff)
downloadqpdf-c6872d2c700a9d27105debe93662ecaaf8beb3bd.tar.zst
Clean up circular references in QPDF_Stream
-rw-r--r--include/qpdf/QPDFObjectHandle.hh1
-rw-r--r--libqpdf/QPDF_Stream.cc7
-rw-r--r--libqpdf/qpdf/QPDF_Stream.hh3
3 files changed, 11 insertions, 0 deletions
diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh
index 8c38fffe..936ccc5d 100644
--- a/include/qpdf/QPDFObjectHandle.hh
+++ b/include/qpdf/QPDFObjectHandle.hh
@@ -597,6 +597,7 @@ class QPDFObjectHandle
{
friend class QPDF_Dictionary;
friend class QPDF_Array;
+ friend class QPDF_Stream;
private:
static void releaseResolved(QPDFObjectHandle& o)
{
diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc
index bcf9be92..27c6b477 100644
--- a/libqpdf/QPDF_Stream.cc
+++ b/libqpdf/QPDF_Stream.cc
@@ -45,6 +45,13 @@ QPDF_Stream::~QPDF_Stream()
}
void
+QPDF_Stream::releaseResolved()
+{
+ this->stream_provider = 0;
+ QPDFObjectHandle::ReleaseResolver::releaseResolved(this->stream_dict);
+}
+
+void
QPDF_Stream::setObjGen(int objid, int generation)
{
if (! ((this->objid == 0) && (this->generation == 0)))
diff --git a/libqpdf/qpdf/QPDF_Stream.hh b/libqpdf/qpdf/QPDF_Stream.hh
index 8b960f00..a2bd5d61 100644
--- a/libqpdf/qpdf/QPDF_Stream.hh
+++ b/libqpdf/qpdf/QPDF_Stream.hh
@@ -43,6 +43,9 @@ class QPDF_Stream: public QPDFObject
// when adding streams to files.
void setObjGen(int objid, int generation);
+ protected:
+ virtual void releaseResolved();
+
private:
static std::map<std::string, std::string> filter_abbreviations;