Commit c62e8e2b285b9b401d6add5a7a0da98c7ea86373

Authored by Jay Berkenbilt
1 parent 3f22bea0

Update for clean compile with POINTERHOLDER_TRANSITION=2

autoconf.mk.in
@@ -22,7 +22,7 @@ LDFLAGS=@LDFLAGS@ @@ -22,7 +22,7 @@ LDFLAGS=@LDFLAGS@
22 LIBS=@LIBS@ 22 LIBS=@LIBS@
23 CPPFLAGS=@CPPFLAGS@ 23 CPPFLAGS=@CPPFLAGS@
24 CXX=@CXX@ 24 CXX=@CXX@
25 -CXXFLAGS=@CXXFLAGS@ $(CXXWFLAGS) $(WFLAGS) 25 +CXXFLAGS=@CXXFLAGS@ $(CXXWFLAGS) $(WFLAGS) -DPOINTERHOLDER_TRANSITION=2
26 RPATH=@RPATH@ 26 RPATH=@RPATH@
27 AR=@AR@ 27 AR=@AR@
28 RANLIB=@RANLIB@ 28 RANLIB=@RANLIB@
examples/pdf-filter-tokens.cc
@@ -220,8 +220,11 @@ int main(int argc, char* argv[]) @@ -220,8 +220,11 @@ int main(int argc, char* argv[])
220 // applied. See comments on the filters for additional 220 // applied. See comments on the filters for additional
221 // details. 221 // details.
222 QPDFPageObjectHelper& page(*iter); 222 QPDFPageObjectHelper& page(*iter);
223 - page.addContentTokenFilter(new StringReverser);  
224 - page.addContentTokenFilter(new ColorToGray); 223 + page.addContentTokenFilter(
  224 + PointerHolder<QPDFObjectHandle::TokenFilter>(
  225 + new StringReverser));
  226 + page.addContentTokenFilter(
  227 + PointerHolder<QPDFObjectHandle::TokenFilter>(new ColorToGray));
225 } 228 }
226 229
227 QPDFWriter w(pdf, outfilename); 230 QPDFWriter w(pdf, outfilename);
examples/pdf-invert-images.cc
@@ -139,7 +139,7 @@ int main(int argc, char* argv[]) @@ -139,7 +139,7 @@ int main(int argc, char* argv[])
139 qpdf.processFile(infilename, password); 139 qpdf.processFile(infilename, password);
140 140
141 ImageInverter* inv = new ImageInverter; 141 ImageInverter* inv = new ImageInverter;
142 - PointerHolder<QPDFObjectHandle::StreamDataProvider> p = inv; 142 + auto p = PointerHolder<QPDFObjectHandle::StreamDataProvider>(inv);
143 143
144 // For each page... 144 // For each page...
145 std::vector<QPDFPageObjectHelper> pages = 145 std::vector<QPDFPageObjectHelper> pages =
fuzz/qpdf_fuzzer.cc
@@ -47,9 +47,9 @@ FuzzHelper::FuzzHelper(unsigned char const* data, size_t size) : @@ -47,9 +47,9 @@ FuzzHelper::FuzzHelper(unsigned char const* data, size_t size) :
47 PointerHolder<QPDF> 47 PointerHolder<QPDF>
48 FuzzHelper::getQpdf() 48 FuzzHelper::getQpdf()
49 { 49 {
50 - PointerHolder<InputSource> is =  
51 - new BufferInputSource("fuzz input", &this->input_buffer);  
52 - PointerHolder<QPDF> qpdf = new QPDF(); 50 + auto is = PointerHolder<InputSource>(
  51 + new BufferInputSource("fuzz input", &this->input_buffer));
  52 + auto qpdf = make_pointer_holder<QPDF>();
53 qpdf->processInputSource(is); 53 qpdf->processInputSource(is);
54 return qpdf; 54 return qpdf;
55 } 55 }
@@ -57,7 +57,7 @@ FuzzHelper::getQpdf() @@ -57,7 +57,7 @@ FuzzHelper::getQpdf()
57 PointerHolder<QPDFWriter> 57 PointerHolder<QPDFWriter>
58 FuzzHelper::getWriter(PointerHolder<QPDF> qpdf) 58 FuzzHelper::getWriter(PointerHolder<QPDF> qpdf)
59 { 59 {
60 - PointerHolder<QPDFWriter> w = new QPDFWriter(*qpdf); 60 + auto w = make_pointer_holder<QPDFWriter>(*qpdf);
61 w->setOutputPipeline(&this->discard); 61 w->setOutputPipeline(&this->discard);
62 w->setDecodeLevel(qpdf_dl_all); 62 w->setDecodeLevel(qpdf_dl_all);
63 return w; 63 return w;
include/qpdf/Buffer.hh
@@ -24,7 +24,9 @@ @@ -24,7 +24,9 @@
24 24
25 #include <qpdf/DLL.h> 25 #include <qpdf/DLL.h>
26 #include <qpdf/PointerHolder.hh> 26 #include <qpdf/PointerHolder.hh>
  27 +
27 #include <stddef.h> 28 #include <stddef.h>
  29 +#include <memory>
28 30
29 class Buffer 31 class Buffer
30 { 32 {
include/qpdf/ClosedFileInputSource.hh
@@ -31,6 +31,8 @@ @@ -31,6 +31,8 @@
31 #include <qpdf/InputSource.hh> 31 #include <qpdf/InputSource.hh>
32 #include <qpdf/PointerHolder.hh> 32 #include <qpdf/PointerHolder.hh>
33 33
  34 +#include <memory>
  35 +
34 class FileInputSource; 36 class FileInputSource;
35 37
36 class ClosedFileInputSource: public InputSource 38 class ClosedFileInputSource: public InputSource
include/qpdf/InputSource.hh
@@ -25,8 +25,10 @@ @@ -25,8 +25,10 @@
25 #include <qpdf/DLL.h> 25 #include <qpdf/DLL.h>
26 #include <qpdf/Types.h> 26 #include <qpdf/Types.h>
27 #include <qpdf/PointerHolder.hh> 27 #include <qpdf/PointerHolder.hh>
  28 +
28 #include <stdio.h> 29 #include <stdio.h>
29 #include <string> 30 #include <string>
  31 +#include <memory>
30 32
31 class QPDF_DLL_CLASS InputSource 33 class QPDF_DLL_CLASS InputSource
32 { 34 {
include/qpdf/JSON.hh
@@ -37,6 +37,7 @@ @@ -37,6 +37,7 @@
37 37
38 #include <qpdf/DLL.h> 38 #include <qpdf/DLL.h>
39 #include <qpdf/PointerHolder.hh> 39 #include <qpdf/PointerHolder.hh>
  40 +
40 #include <string> 41 #include <string>
41 #include <map> 42 #include <map>
42 #include <vector> 43 #include <vector>
include/qpdf/Pipeline.hh
@@ -46,7 +46,9 @@ @@ -46,7 +46,9 @@
46 46
47 #include <qpdf/DLL.h> 47 #include <qpdf/DLL.h>
48 #include <qpdf/PointerHolder.hh> 48 #include <qpdf/PointerHolder.hh>
  49 +
49 #include <string> 50 #include <string>
  51 +#include <memory>
50 52
51 class QPDF_DLL_CLASS Pipeline 53 class QPDF_DLL_CLASS Pipeline
52 { 54 {
include/qpdf/Pl_Buffer.hh
@@ -37,6 +37,8 @@ @@ -37,6 +37,8 @@
37 #include <qpdf/PointerHolder.hh> 37 #include <qpdf/PointerHolder.hh>
38 #include <qpdf/Buffer.hh> 38 #include <qpdf/Buffer.hh>
39 39
  40 +#include <memory>
  41 +
40 class Pl_Buffer: public Pipeline 42 class Pl_Buffer: public Pipeline
41 { 43 {
42 public: 44 public:
include/qpdf/Pl_QPDFTokenizer.hh
@@ -29,6 +29,8 @@ @@ -29,6 +29,8 @@
29 #include <qpdf/QPDFObjectHandle.hh> 29 #include <qpdf/QPDFObjectHandle.hh>
30 #include <qpdf/Pl_Buffer.hh> 30 #include <qpdf/Pl_Buffer.hh>
31 31
  32 +#include <memory>
  33 +
32 // Tokenize the incoming text using QPDFTokenizer and pass the tokens 34 // Tokenize the incoming text using QPDFTokenizer and pass the tokens
33 // in turn to a QPDFObjectHandle::TokenFilter object. All bytes of 35 // in turn to a QPDFObjectHandle::TokenFilter object. All bytes of
34 // incoming content will be included in exactly one token and passed 36 // incoming content will be included in exactly one token and passed
include/qpdf/QPDFObjectHandle.hh
@@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
31 #include <set> 31 #include <set>
32 #include <map> 32 #include <map>
33 #include <functional> 33 #include <functional>
  34 +#include <memory>
34 35
35 #include <qpdf/QPDFObjGen.hh> 36 #include <qpdf/QPDFObjGen.hh>
36 #include <qpdf/PointerHolder.hh> 37 #include <qpdf/PointerHolder.hh>
include/qpdf/QPDFTokenizer.hh
@@ -26,8 +26,10 @@ @@ -26,8 +26,10 @@
26 26
27 #include <qpdf/InputSource.hh> 27 #include <qpdf/InputSource.hh>
28 #include <qpdf/PointerHolder.hh> 28 #include <qpdf/PointerHolder.hh>
  29 +
29 #include <string> 30 #include <string>
30 #include <stdio.h> 31 #include <stdio.h>
  32 +#include <memory>
31 33
32 class QPDFTokenizer 34 class QPDFTokenizer
33 { 35 {
libqpdf/Buffer.cc
@@ -57,7 +57,7 @@ Buffer::copy(Buffer const&amp; rhs) @@ -57,7 +57,7 @@ Buffer::copy(Buffer const&amp; rhs)
57 { 57 {
58 if (this != &rhs) 58 if (this != &rhs)
59 { 59 {
60 - this->m = new Members(rhs.m->size, 0, true); 60 + this->m = PointerHolder<Members>(new Members(rhs.m->size, 0, true));
61 if (this->m->size) 61 if (this->m->size)
62 { 62 {
63 memcpy(this->m->buf, rhs.m->buf, this->m->size); 63 memcpy(this->m->buf, rhs.m->buf, this->m->size);
libqpdf/ClosedFileInputSource.cc
@@ -27,7 +27,7 @@ ClosedFileInputSource::before() @@ -27,7 +27,7 @@ ClosedFileInputSource::before()
27 { 27 {
28 if (0 == this->m->fis.get()) 28 if (0 == this->m->fis.get())
29 { 29 {
30 - this->m->fis = new FileInputSource(); 30 + this->m->fis = make_pointer_holder<FileInputSource>();
31 this->m->fis->setFilename(this->m->filename.c_str()); 31 this->m->fis->setFilename(this->m->filename.c_str());
32 this->m->fis->seek(this->m->offset, SEEK_SET); 32 this->m->fis->seek(this->m->offset, SEEK_SET);
33 this->m->fis->setLastOffset(this->last_offset); 33 this->m->fis->setLastOffset(this->last_offset);
libqpdf/FileInputSource.cc
@@ -27,7 +27,7 @@ FileInputSource::FileInputSource() : @@ -27,7 +27,7 @@ FileInputSource::FileInputSource() :
27 void 27 void
28 FileInputSource::setFilename(char const* filename) 28 FileInputSource::setFilename(char const* filename)
29 { 29 {
30 - this->m = new Members(true); 30 + this->m = PointerHolder<Members>(new Members(true));
31 this->m->filename = filename; 31 this->m->filename = filename;
32 this->m->file = QUtil::safe_fopen(filename, "rb"); 32 this->m->file = QUtil::safe_fopen(filename, "rb");
33 } 33 }
@@ -36,7 +36,7 @@ void @@ -36,7 +36,7 @@ void
36 FileInputSource::setFile( 36 FileInputSource::setFile(
37 char const* description, FILE* filep, bool close_file) 37 char const* description, FILE* filep, bool close_file)
38 { 38 {
39 - this->m = new Members(close_file); 39 + this->m = PointerHolder<Members>(new Members(close_file));
40 this->m->filename = description; 40 this->m->filename = description;
41 this->m->file = filep; 41 this->m->file = filep;
42 this->seek(0, SEEK_SET); 42 this->seek(0, SEEK_SET);
libqpdf/Pl_Buffer.cc
@@ -31,14 +31,14 @@ Pl_Buffer::write(unsigned char* buf, size_t len) @@ -31,14 +31,14 @@ Pl_Buffer::write(unsigned char* buf, size_t len)
31 { 31 {
32 if (this->m->data.get() == 0) 32 if (this->m->data.get() == 0)
33 { 33 {
34 - this->m->data = new Buffer(len); 34 + this->m->data = make_pointer_holder<Buffer>(len);
35 } 35 }
36 size_t cur_size = this->m->data->getSize(); 36 size_t cur_size = this->m->data->getSize();
37 size_t left = cur_size - this->m->total_size; 37 size_t left = cur_size - this->m->total_size;
38 if (left < len) 38 if (left < len)
39 { 39 {
40 size_t new_size = std::max(this->m->total_size + len, 2 * cur_size); 40 size_t new_size = std::max(this->m->total_size + len, 2 * cur_size);
41 - PointerHolder<Buffer> b = new Buffer(new_size); 41 + auto b = make_pointer_holder<Buffer>(new_size);
42 memcpy(b->getBuffer(), this->m->data->getBuffer(), this->m->total_size); 42 memcpy(b->getBuffer(), this->m->data->getBuffer(), this->m->total_size);
43 this->m->data = b; 43 this->m->data = b;
44 } 44 }
@@ -108,5 +108,5 @@ Pl_Buffer::getMallocBuffer(unsigned char **buf, size_t* len) @@ -108,5 +108,5 @@ Pl_Buffer::getMallocBuffer(unsigned char **buf, size_t* len)
108 { 108 {
109 *buf = nullptr; 109 *buf = nullptr;
110 } 110 }
111 - this->m = new Members(); 111 + this->m = PointerHolder<Members>(new Members());
112 } 112 }
libqpdf/Pl_QPDFTokenizer.cc
@@ -43,10 +43,10 @@ void @@ -43,10 +43,10 @@ void
43 Pl_QPDFTokenizer::finish() 43 Pl_QPDFTokenizer::finish()
44 { 44 {
45 this->m->buf.finish(); 45 this->m->buf.finish();
46 - PointerHolder<InputSource> input = 46 + auto input = PointerHolder<InputSource>(
47 new BufferInputSource("tokenizer data", 47 new BufferInputSource("tokenizer data",
48 - this->m->buf.getBuffer(), true);  
49 - 48 + this->m->buf.getBuffer(), true));
  49 +
50 while (true) 50 while (true)
51 { 51 {
52 QPDFTokenizer::Token token = this->m->tokenizer.readToken( 52 QPDFTokenizer::Token token = this->m->tokenizer.readToken(
libqpdf/QPDF.cc
@@ -269,7 +269,7 @@ QPDF::processFile(char const* filename, char const* password) @@ -269,7 +269,7 @@ QPDF::processFile(char const* filename, char const* password)
269 { 269 {
270 FileInputSource* fi = new FileInputSource(); 270 FileInputSource* fi = new FileInputSource();
271 fi->setFilename(filename); 271 fi->setFilename(filename);
272 - processInputSource(fi, password); 272 + processInputSource(PointerHolder<InputSource>(fi), password);
273 } 273 }
274 274
275 void 275 void
@@ -278,7 +278,7 @@ QPDF::processFile(char const* description, FILE* filep, @@ -278,7 +278,7 @@ QPDF::processFile(char const* description, FILE* filep,
278 { 278 {
279 FileInputSource* fi = new FileInputSource(); 279 FileInputSource* fi = new FileInputSource();
280 fi->setFile(description, filep, close_file); 280 fi->setFile(description, filep, close_file);
281 - processInputSource(fi, password); 281 + processInputSource(PointerHolder<InputSource>(fi), password);
282 } 282 }
283 283
284 void 284 void
@@ -287,10 +287,11 @@ QPDF::processMemoryFile(char const* description, @@ -287,10 +287,11 @@ QPDF::processMemoryFile(char const* description,
287 char const* password) 287 char const* password)
288 { 288 {
289 processInputSource( 289 processInputSource(
290 - new BufferInputSource(  
291 - description,  
292 - new Buffer(QUtil::unsigned_char_pointer(buf), length),  
293 - true), 290 + PointerHolder<InputSource>(
  291 + new BufferInputSource(
  292 + description,
  293 + new Buffer(QUtil::unsigned_char_pointer(buf), length),
  294 + true)),
294 password); 295 password);
295 } 296 }
296 297
@@ -305,7 +306,7 @@ QPDF::processInputSource(PointerHolder&lt;InputSource&gt; source, @@ -305,7 +306,7 @@ QPDF::processInputSource(PointerHolder&lt;InputSource&gt; source,
305 void 306 void
306 QPDF::closeInputSource() 307 QPDF::closeInputSource()
307 { 308 {
308 - this->m->file = new InvalidInputSource(); 309 + this->m->file = PointerHolder<InputSource>(new InvalidInputSource());
309 } 310 }
310 311
311 void 312 void
@@ -425,7 +426,8 @@ QPDF::findHeader() @@ -425,7 +426,8 @@ QPDF::findHeader()
425 // offsets in the file are such that 0 points to the 426 // offsets in the file are such that 0 points to the
426 // beginning of the header. 427 // beginning of the header.
427 QTC::TC("qpdf", "QPDF global offset"); 428 QTC::TC("qpdf", "QPDF global offset");
428 - this->m->file = new OffsetInputSource(this->m->file, global_offset); 429 + this->m->file = PointerHolder<InputSource>(
  430 + new OffsetInputSource(this->m->file, global_offset));
429 } 431 }
430 } 432 }
431 return valid; 433 return valid;
@@ -1607,7 +1609,8 @@ QPDF::readObject(PointerHolder&lt;InputSource&gt; input, @@ -1607,7 +1609,8 @@ QPDF::readObject(PointerHolder&lt;InputSource&gt; input,
1607 StringDecrypter* decrypter = 0; 1609 StringDecrypter* decrypter = 0;
1608 if (this->m->encp->encrypted && (! in_object_stream)) 1610 if (this->m->encp->encrypted && (! in_object_stream))
1609 { 1611 {
1610 - decrypter_ph = new StringDecrypter(this, objid, generation); 1612 + decrypter_ph = make_pointer_holder<StringDecrypter>(
  1613 + this, objid, generation);
1611 decrypter = decrypter_ph.get(); 1614 decrypter = decrypter_ph.get();
1612 } 1615 }
1613 QPDFObjectHandle object = QPDFObjectHandle::parse( 1616 QPDFObjectHandle object = QPDFObjectHandle::parse(
@@ -2105,7 +2108,7 @@ QPDF::resolve(int objid, int generation) @@ -2105,7 +2108,7 @@ QPDF::resolve(int objid, int generation)
2105 "loop detected resolving object " + 2108 "loop detected resolving object " +
2106 QUtil::int_to_string(objid) + " " + 2109 QUtil::int_to_string(objid) + " " +
2107 QUtil::int_to_string(generation))); 2110 QUtil::int_to_string(generation)));
2108 - return new QPDF_Null; 2111 + return PointerHolder<QPDFObject>(new QPDF_Null);
2109 } 2112 }
2110 ResolveRecorder rr(this, og); 2113 ResolveRecorder rr(this, og);
2111 2114
@@ -2231,10 +2234,11 @@ QPDF::resolveObjectsInStream(int obj_stream_number) @@ -2231,10 +2234,11 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
2231 std::map<int, int> offsets; 2234 std::map<int, int> offsets;
2232 2235
2233 PointerHolder<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized); 2236 PointerHolder<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized);
2234 - PointerHolder<InputSource> input = new BufferInputSource(  
2235 - this->m->file->getName() +  
2236 - " object stream " + QUtil::int_to_string(obj_stream_number),  
2237 - bp.get()); 2237 + auto input = PointerHolder<InputSource>(
  2238 + new BufferInputSource(
  2239 + this->m->file->getName() +
  2240 + " object stream " + QUtil::int_to_string(obj_stream_number),
  2241 + bp.get()));
2238 2242
2239 for (int i = 0; i < n; ++i) 2243 for (int i = 0; i < n; ++i)
2240 { 2244 {
@@ -2630,7 +2634,9 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) @@ -2630,7 +2634,9 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2630 { 2634 {
2631 this->m->copied_stream_data_provider = 2635 this->m->copied_stream_data_provider =
2632 new CopiedStreamDataProvider(*this); 2636 new CopiedStreamDataProvider(*this);
2633 - this->m->copied_streams = this->m->copied_stream_data_provider; 2637 + this->m->copied_streams =
  2638 + PointerHolder<QPDFObjectHandle::StreamDataProvider>(
  2639 + this->m->copied_stream_data_provider);
2634 } 2640 }
2635 QPDFObjGen local_og(result.getObjGen()); 2641 QPDFObjGen local_og(result.getObjGen());
2636 // Copy information from the foreign stream so we can pipe its 2642 // Copy information from the foreign stream so we can pipe its
@@ -2686,8 +2692,8 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) @@ -2686,8 +2692,8 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2686 } 2692 }
2687 else 2693 else
2688 { 2694 {
2689 - PointerHolder<ForeignStreamData> foreign_stream_data =  
2690 - new ForeignStreamData( 2695 + auto foreign_stream_data =
  2696 + make_pointer_holder<ForeignStreamData>(
2691 foreign_stream_qpdf->m->encp, 2697 foreign_stream_qpdf->m->encp,
2692 foreign_stream_qpdf->m->file, 2698 foreign_stream_qpdf->m->file,
2693 foreign.getObjectID(), 2699 foreign.getObjectID(),
libqpdf/QPDFAcroFormDocumentHelper.cc
@@ -768,7 +768,7 @@ QPDFAcroFormDocumentHelper::adjustDefaultAppearances( @@ -768,7 +768,7 @@ QPDFAcroFormDocumentHelper::adjustDefaultAppearances(
768 ResourceReplacer rr(dr_map, rf.getNamesByResourceType()); 768 ResourceReplacer rr(dr_map, rf.getNamesByResourceType());
769 Pl_Buffer buf_pl("filtered DA"); 769 Pl_Buffer buf_pl("filtered DA");
770 da_stream.filterAsContents(&rr, &buf_pl); 770 da_stream.filterAsContents(&rr, &buf_pl);
771 - PointerHolder<Buffer> buf = buf_pl.getBuffer(); 771 + auto buf = buf_pl.getBufferSharedPointer();
772 std::string new_da( 772 std::string new_da(
773 reinterpret_cast<char*>(buf->getBuffer()), buf->getSize()); 773 reinterpret_cast<char*>(buf->getBuffer()), buf->getSize());
774 obj.replaceKey("/DA", QPDFObjectHandle::newString(new_da)); 774 obj.replaceKey("/DA", QPDFObjectHandle::newString(new_da));
@@ -871,7 +871,7 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream( @@ -871,7 +871,7 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream(
871 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper AP parse error"); 871 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper AP parse error");
872 } 872 }
873 auto rr = new ResourceReplacer(dr_map, rf.getNamesByResourceType()); 873 auto rr = new ResourceReplacer(dr_map, rf.getNamesByResourceType());
874 - PointerHolder<QPDFObjectHandle::TokenFilter> tf = rr; 874 + auto tf = PointerHolder<QPDFObjectHandle::TokenFilter>(rr);
875 stream.addTokenFilter(tf); 875 stream.addTokenFilter(tf);
876 } 876 }
877 catch (std::exception& e) 877 catch (std::exception& e)
@@ -902,7 +902,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations( @@ -902,7 +902,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations(
902 } 902 }
903 else if ((from_qpdf != &this->qpdf) && (! from_afdh)) 903 else if ((from_qpdf != &this->qpdf) && (! from_afdh))
904 { 904 {
905 - afdhph = new QPDFAcroFormDocumentHelper(*from_qpdf); 905 + afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf);
906 from_afdh = afdhph.get(); 906 from_afdh = afdhph.get();
907 } 907 }
908 bool foreign = (from_qpdf != &this->qpdf); 908 bool foreign = (from_qpdf != &this->qpdf);
libqpdf/QPDFFormFieldObjectHelper.cc
@@ -1008,5 +1008,7 @@ QPDFFormFieldObjectHelper::generateTextAppearance( @@ -1008,5 +1008,7 @@ QPDFFormFieldObjectHelper::generateTextAppearance(
1008 opt.at(i) = (*encoder)(opt.at(i), '?'); 1008 opt.at(i) = (*encoder)(opt.at(i), '?');
1009 } 1009 }
1010 1010
1011 - AS.addTokenFilter(new ValueSetter(DA, V, opt, tf, bbox)); 1011 + AS.addTokenFilter(
  1012 + PointerHolder<QPDFObjectHandle::TokenFilter>(
  1013 + new ValueSetter(DA, V, opt, tf, bbox)));
1012 } 1014 }
libqpdf/QPDFJob.cc
@@ -2854,14 +2854,14 @@ QPDFJob::handlePageSpecs( @@ -2854,14 +2854,14 @@ QPDFJob::handlePageSpecs(
2854 { 2854 {
2855 QTC::TC("qpdf", "QPDFJob keep files open n"); 2855 QTC::TC("qpdf", "QPDFJob keep files open n");
2856 cis = new ClosedFileInputSource(page_spec.filename.c_str()); 2856 cis = new ClosedFileInputSource(page_spec.filename.c_str());
2857 - is = cis; 2857 + is = PointerHolder<InputSource>(cis);
2858 cis->stayOpen(true); 2858 cis->stayOpen(true);
2859 } 2859 }
2860 else 2860 else
2861 { 2861 {
2862 QTC::TC("qpdf", "QPDFJob keep files open y"); 2862 QTC::TC("qpdf", "QPDFJob keep files open y");
2863 FileInputSource* fis = new FileInputSource(); 2863 FileInputSource* fis = new FileInputSource();
2864 - is = fis; 2864 + is = PointerHolder<InputSource>(fis);
2865 fis->setFilename(page_spec.filename.c_str()); 2865 fis->setFilename(page_spec.filename.c_str());
2866 } 2866 }
2867 std::shared_ptr<QPDF> qpdf_ph = processInputSource(is, password); 2867 std::shared_ptr<QPDF> qpdf_ph = processInputSource(is, password);
@@ -3489,9 +3489,10 @@ QPDFJob::setWriterOptions(QPDF&amp; pdf, QPDFWriter&amp; w) @@ -3489,9 +3489,10 @@ QPDFJob::setWriterOptions(QPDF&amp; pdf, QPDFWriter&amp; w)
3489 if (m->progress && m->outfilename) 3489 if (m->progress && m->outfilename)
3490 { 3490 {
3491 w.registerProgressReporter( 3491 w.registerProgressReporter(
3492 - new ProgressReporter(  
3493 - *(this->m->cout), this->m->message_prefix,  
3494 - m->outfilename.get())); 3492 + PointerHolder<QPDFWriter::ProgressReporter>(
  3493 + new ProgressReporter(
  3494 + *(this->m->cout), this->m->message_prefix,
  3495 + m->outfilename.get())));
3495 } 3496 }
3496 } 3497 }
3497 3498
libqpdf/QPDFObjectHandle.cc
@@ -1603,7 +1603,7 @@ QPDFObjectHandle::replaceStreamData(std::string const&amp; data, @@ -1603,7 +1603,7 @@ QPDFObjectHandle::replaceStreamData(std::string const&amp; data,
1603 QPDFObjectHandle const& decode_parms) 1603 QPDFObjectHandle const& decode_parms)
1604 { 1604 {
1605 assertStream(); 1605 assertStream();
1606 - PointerHolder<Buffer> b = new Buffer(data.length()); 1606 + auto b = make_pointer_holder<Buffer>(data.length());
1607 unsigned char* bp = b->getBuffer(); 1607 unsigned char* bp = b->getBuffer();
1608 memcpy(bp, data.c_str(), data.length()); 1608 memcpy(bp, data.c_str(), data.length());
1609 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( 1609 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
@@ -1659,7 +1659,8 @@ QPDFObjectHandle::replaceStreamData(std::function&lt;void(Pipeline*)&gt; provider, @@ -1659,7 +1659,8 @@ QPDFObjectHandle::replaceStreamData(std::function&lt;void(Pipeline*)&gt; provider,
1659 QPDFObjectHandle const& decode_parms) 1659 QPDFObjectHandle const& decode_parms)
1660 { 1660 {
1661 assertStream(); 1661 assertStream();
1662 - PointerHolder<StreamDataProvider> sdp = new FunctionProvider(provider); 1662 + auto sdp = PointerHolder<StreamDataProvider>(
  1663 + new FunctionProvider(provider));
1663 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( 1664 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
1664 sdp, filter, decode_parms); 1665 sdp, filter, decode_parms);
1665 } 1666 }
@@ -1671,7 +1672,8 @@ QPDFObjectHandle::replaceStreamData( @@ -1671,7 +1672,8 @@ QPDFObjectHandle::replaceStreamData(
1671 QPDFObjectHandle const& decode_parms) 1672 QPDFObjectHandle const& decode_parms)
1672 { 1673 {
1673 assertStream(); 1674 assertStream();
1674 - PointerHolder<StreamDataProvider> sdp = new FunctionProvider(provider); 1675 + auto sdp = PointerHolder<StreamDataProvider>(
  1676 + new FunctionProvider(provider));
1675 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( 1677 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
1676 sdp, filter, decode_parms); 1678 sdp, filter, decode_parms);
1677 } 1679 }
@@ -1886,8 +1888,8 @@ QPDFObjectHandle::coalesceContentStreams() @@ -1886,8 +1888,8 @@ QPDFObjectHandle::coalesceContentStreams()
1886 QPDFObjectHandle new_contents = newStream(qpdf); 1888 QPDFObjectHandle new_contents = newStream(qpdf);
1887 this->replaceKey("/Contents", new_contents); 1889 this->replaceKey("/Contents", new_contents);
1888 1890
1889 - PointerHolder<StreamDataProvider> provider =  
1890 - new CoalesceProvider(*this, contents); 1891 + auto provider = PointerHolder<StreamDataProvider>(
  1892 + new CoalesceProvider(*this, contents));
1891 new_contents.replaceStreamData(provider, newNull(), newNull()); 1893 new_contents.replaceStreamData(provider, newNull(), newNull());
1892 } 1894 }
1893 1895
@@ -1976,8 +1978,8 @@ QPDFObjectHandle::parse(QPDF* context, @@ -1976,8 +1978,8 @@ QPDFObjectHandle::parse(QPDF* context,
1976 std::string const& object_str, 1978 std::string const& object_str,
1977 std::string const& object_description) 1979 std::string const& object_description)
1978 { 1980 {
1979 - PointerHolder<InputSource> input =  
1980 - new BufferInputSource("parsed object", object_str); 1981 + auto input = PointerHolder<InputSource>(
  1982 + new BufferInputSource("parsed object", object_str));
1981 QPDFTokenizer tokenizer; 1983 QPDFTokenizer tokenizer;
1982 bool empty = false; 1984 bool empty = false;
1983 QPDFObjectHandle result = 1985 QPDFObjectHandle result =
@@ -2103,7 +2105,7 @@ QPDFObjectHandle::parseContentStream_internal( @@ -2103,7 +2105,7 @@ QPDFObjectHandle::parseContentStream_internal(
2103 Pl_Buffer buf("concatenated stream data buffer"); 2105 Pl_Buffer buf("concatenated stream data buffer");
2104 std::string all_description; 2106 std::string all_description;
2105 pipeContentStreams(&buf, description, all_description); 2107 pipeContentStreams(&buf, description, all_description);
2106 - PointerHolder<Buffer> stream_data = buf.getBuffer(); 2108 + auto stream_data = buf.getBufferSharedPointer();
2107 callbacks->contentSize(stream_data->getSize()); 2109 callbacks->contentSize(stream_data->getSize());
2108 try 2110 try
2109 { 2111 {
@@ -2125,8 +2127,8 @@ QPDFObjectHandle::parseContentStream_data( @@ -2125,8 +2127,8 @@ QPDFObjectHandle::parseContentStream_data(
2125 QPDF* context) 2127 QPDF* context)
2126 { 2128 {
2127 size_t stream_length = stream_data->getSize(); 2129 size_t stream_length = stream_data->getSize();
2128 - PointerHolder<InputSource> input =  
2129 - new BufferInputSource(description, stream_data.get()); 2130 + auto input = PointerHolder<InputSource>(
  2131 + new BufferInputSource(description, stream_data.get()));
2130 QPDFTokenizer tokenizer; 2132 QPDFTokenizer tokenizer;
2131 tokenizer.allowEOF(); 2133 tokenizer.allowEOF();
2132 bool empty = false; 2134 bool empty = false;
@@ -3078,32 +3080,32 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited, @@ -3078,32 +3080,32 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited,
3078 if (isBool()) 3080 if (isBool())
3079 { 3081 {
3080 QTC::TC("qpdf", "QPDFObjectHandle clone bool"); 3082 QTC::TC("qpdf", "QPDFObjectHandle clone bool");
3081 - new_obj = new QPDF_Bool(getBoolValue()); 3083 + new_obj = PointerHolder<QPDFObject>(new QPDF_Bool(getBoolValue()));
3082 } 3084 }
3083 else if (isNull()) 3085 else if (isNull())
3084 { 3086 {
3085 QTC::TC("qpdf", "QPDFObjectHandle clone null"); 3087 QTC::TC("qpdf", "QPDFObjectHandle clone null");
3086 - new_obj = new QPDF_Null(); 3088 + new_obj = PointerHolder<QPDFObject>(new QPDF_Null());
3087 } 3089 }
3088 else if (isInteger()) 3090 else if (isInteger())
3089 { 3091 {
3090 QTC::TC("qpdf", "QPDFObjectHandle clone integer"); 3092 QTC::TC("qpdf", "QPDFObjectHandle clone integer");
3091 - new_obj = new QPDF_Integer(getIntValue()); 3093 + new_obj = PointerHolder<QPDFObject>(new QPDF_Integer(getIntValue()));
3092 } 3094 }
3093 else if (isReal()) 3095 else if (isReal())
3094 { 3096 {
3095 QTC::TC("qpdf", "QPDFObjectHandle clone real"); 3097 QTC::TC("qpdf", "QPDFObjectHandle clone real");
3096 - new_obj = new QPDF_Real(getRealValue()); 3098 + new_obj = PointerHolder<QPDFObject>(new QPDF_Real(getRealValue()));
3097 } 3099 }
3098 else if (isName()) 3100 else if (isName())
3099 { 3101 {
3100 QTC::TC("qpdf", "QPDFObjectHandle clone name"); 3102 QTC::TC("qpdf", "QPDFObjectHandle clone name");
3101 - new_obj = new QPDF_Name(getName()); 3103 + new_obj = PointerHolder<QPDFObject>(new QPDF_Name(getName()));
3102 } 3104 }
3103 else if (isString()) 3105 else if (isString())
3104 { 3106 {
3105 QTC::TC("qpdf", "QPDFObjectHandle clone string"); 3107 QTC::TC("qpdf", "QPDFObjectHandle clone string");
3106 - new_obj = new QPDF_String(getStringValue()); 3108 + new_obj = PointerHolder<QPDFObject>(new QPDF_String(getStringValue()));
3107 } 3109 }
3108 else if (isArray()) 3110 else if (isArray())
3109 { 3111 {
@@ -3121,7 +3123,7 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited, @@ -3121,7 +3123,7 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited,
3121 first_level_only, stop_at_streams); 3123 first_level_only, stop_at_streams);
3122 } 3124 }
3123 } 3125 }
3124 - new_obj = new QPDF_Array(items); 3126 + new_obj = PointerHolder<QPDFObject>(new QPDF_Array(items));
3125 } 3127 }
3126 else if (isDictionary()) 3128 else if (isDictionary())
3127 { 3129 {
@@ -3140,7 +3142,7 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited, @@ -3140,7 +3142,7 @@ QPDFObjectHandle::copyObject(std::set&lt;QPDFObjGen&gt;&amp; visited,
3140 first_level_only, stop_at_streams); 3142 first_level_only, stop_at_streams);
3141 } 3143 }
3142 } 3144 }
3143 - new_obj = new QPDF_Dictionary(items); 3145 + new_obj = PointerHolder<QPDFObject>(new QPDF_Dictionary(items));
3144 } 3146 }
3145 else 3147 else
3146 { 3148 {
@@ -3461,7 +3463,7 @@ QPDFObjectHandle::dereference() @@ -3461,7 +3463,7 @@ QPDFObjectHandle::dereference()
3461 { 3463 {
3462 // QPDF::resolve never returns an uninitialized object, but 3464 // QPDF::resolve never returns an uninitialized object, but
3463 // check just in case. 3465 // check just in case.
3464 - this->obj = new QPDF_Null(); 3466 + this->obj = PointerHolder<QPDFObject>(new QPDF_Null());
3465 } 3467 }
3466 else if (dynamic_cast<QPDF_Reserved*>(obj.get())) 3468 else if (dynamic_cast<QPDF_Reserved*>(obj.get()))
3467 { 3469 {
libqpdf/QPDFOutlineDocumentHelper.cc
@@ -114,7 +114,8 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name) @@ -114,7 +114,8 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name)
114 if (dests.isDictionary()) 114 if (dests.isDictionary())
115 { 115 {
116 this->m->names_dest = 116 this->m->names_dest =
117 - new QPDFNameTreeObjectHelper(dests, this->qpdf); 117 + make_pointer_holder<QPDFNameTreeObjectHelper>(
  118 + dests, this->qpdf);
118 } 119 }
119 } 120 }
120 } 121 }
libqpdf/QPDFOutlineObjectHelper.cc
@@ -34,7 +34,7 @@ QPDFOutlineObjectHelper::QPDFOutlineObjectHelper( @@ -34,7 +34,7 @@ QPDFOutlineObjectHelper::QPDFOutlineObjectHelper(
34 while (! cur.isNull()) 34 while (! cur.isNull())
35 { 35 {
36 QPDFOutlineObjectHelper new_ooh(cur, dh, 1 + depth); 36 QPDFOutlineObjectHelper new_ooh(cur, dh, 1 + depth);
37 - new_ooh.m->parent = new QPDFOutlineObjectHelper(*this); 37 + new_ooh.m->parent = make_pointer_holder<QPDFOutlineObjectHelper>(*this);
38 this->m->kids.push_back(new_ooh); 38 this->m->kids.push_back(new_ooh);
39 cur = cur.getKey("/Next"); 39 cur = cur.getKey("/Next");
40 } 40 }
libqpdf/QPDFPageLabelDocumentHelper.cc
@@ -17,7 +17,7 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF&amp; qpdf) : @@ -17,7 +17,7 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF&amp; qpdf) :
17 QPDFObjectHandle root = qpdf.getRoot(); 17 QPDFObjectHandle root = qpdf.getRoot();
18 if (root.hasKey("/PageLabels")) 18 if (root.hasKey("/PageLabels"))
19 { 19 {
20 - this->m->labels = new QPDFNumberTreeObjectHelper( 20 + this->m->labels = make_pointer_holder<QPDFNumberTreeObjectHelper>(
21 root.getKey("/PageLabels"), this->qpdf); 21 root.getKey("/PageLabels"), this->qpdf);
22 } 22 }
23 } 23 }
libqpdf/QPDFPageObjectHelper.cc
@@ -258,7 +258,7 @@ InlineImageTracker::handleToken(QPDFTokenizer::Token const&amp; token) @@ -258,7 +258,7 @@ InlineImageTracker::handleToken(QPDFTokenizer::Token const&amp; token)
258 std::string name = resources.getUniqueResourceName( 258 std::string name = resources.getUniqueResourceName(
259 "/IIm", this->min_suffix); 259 "/IIm", this->min_suffix);
260 QPDFObjectHandle image = QPDFObjectHandle::newStream( 260 QPDFObjectHandle image = QPDFObjectHandle::newStream(
261 - this->qpdf, b.getBuffer()); 261 + this->qpdf, b.getBufferSharedPointer());
262 image.replaceDict(dict); 262 image.replaceDict(dict);
263 resources.getKey("/XObject").replaceKey(name, image); 263 resources.getKey("/XObject").replaceKey(name, image);
264 write(name); 264 write(name);
@@ -521,7 +521,7 @@ QPDFPageObjectHelper::externalizeInlineImages(size_t min_size, bool shallow) @@ -521,7 +521,7 @@ QPDFPageObjectHelper::externalizeInlineImages(size_t min_size, bool shallow)
521 if (this->oh.isFormXObject()) 521 if (this->oh.isFormXObject())
522 { 522 {
523 this->oh.replaceStreamData( 523 this->oh.replaceStreamData(
524 - b.getBuffer(), 524 + b.getBufferSharedPointer(),
525 QPDFObjectHandle::newNull(), 525 QPDFObjectHandle::newNull(),
526 QPDFObjectHandle::newNull()); 526 QPDFObjectHandle::newNull());
527 } 527 }
@@ -530,7 +530,8 @@ QPDFPageObjectHelper::externalizeInlineImages(size_t min_size, bool shallow) @@ -530,7 +530,8 @@ QPDFPageObjectHelper::externalizeInlineImages(size_t min_size, bool shallow)
530 this->oh.replaceKey( 530 this->oh.replaceKey(
531 "/Contents", 531 "/Contents",
532 QPDFObjectHandle::newStream( 532 QPDFObjectHandle::newStream(
533 - this->oh.getOwningQPDF(), b.getBuffer())); 533 + this->oh.getOwningQPDF(),
  534 + b.getBufferSharedPointer()));
534 } 535 }
535 } 536 }
536 } 537 }
@@ -914,8 +915,8 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations) @@ -914,8 +915,8 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations)
914 " XObject created from page will not work"); 915 " XObject created from page will not work");
915 } 916 }
916 newdict.replaceKey("/BBox", bbox); 917 newdict.replaceKey("/BBox", bbox);
917 - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider =  
918 - new ContentProvider(this->oh); 918 + auto provider = PointerHolder<QPDFObjectHandle::StreamDataProvider>(
  919 + new ContentProvider(this->oh));
919 result.replaceStreamData( 920 result.replaceStreamData(
920 provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull()); 921 provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
921 QPDFObjectHandle rotate_obj = getAttribute("/Rotate", false); 922 QPDFObjectHandle rotate_obj = getAttribute("/Rotate", false);
@@ -1221,7 +1222,7 @@ QPDFPageObjectHelper::flattenRotation(QPDFAcroFormDocumentHelper* afdh) @@ -1221,7 +1222,7 @@ QPDFPageObjectHelper::flattenRotation(QPDFAcroFormDocumentHelper* afdh)
1221 PointerHolder<QPDFAcroFormDocumentHelper> afdhph; 1222 PointerHolder<QPDFAcroFormDocumentHelper> afdhph;
1222 if (! afdh) 1223 if (! afdh)
1223 { 1224 {
1224 - afdhph = new QPDFAcroFormDocumentHelper(*qpdf); 1225 + afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*qpdf);
1225 afdh = afdhph.get(); 1226 afdh = afdhph.get();
1226 } 1227 }
1227 afdh->transformAnnotations( 1228 afdh->transformAnnotations(
@@ -1269,7 +1270,7 @@ QPDFPageObjectHelper::copyAnnotations( @@ -1269,7 +1270,7 @@ QPDFPageObjectHelper::copyAnnotations(
1269 PointerHolder<QPDFAcroFormDocumentHelper> from_afdhph; 1270 PointerHolder<QPDFAcroFormDocumentHelper> from_afdhph;
1270 if (! afdh) 1271 if (! afdh)
1271 { 1272 {
1272 - afdhph = new QPDFAcroFormDocumentHelper(*this_qpdf); 1273 + afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*this_qpdf);
1273 afdh = afdhph.get(); 1274 afdh = afdhph.get();
1274 } 1275 }
1275 if (this_qpdf == from_qpdf) 1276 if (this_qpdf == from_qpdf)
@@ -1287,7 +1288,8 @@ QPDFPageObjectHelper::copyAnnotations( @@ -1287,7 +1288,8 @@ QPDFPageObjectHelper::copyAnnotations(
1287 } 1288 }
1288 else 1289 else
1289 { 1290 {
1290 - from_afdhph = new QPDFAcroFormDocumentHelper(*from_qpdf); 1291 + from_afdhph =
  1292 + make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf);
1291 from_afdh = from_afdhph.get(); 1293 from_afdh = from_afdhph.get();
1292 } 1294 }
1293 1295
libqpdf/QPDFWriter.cc
@@ -1108,7 +1108,7 @@ QPDFWriter::PipelinePopper::~PipelinePopper() @@ -1108,7 +1108,7 @@ QPDFWriter::PipelinePopper::~PipelinePopper()
1108 Pl_Buffer* buf = dynamic_cast<Pl_Buffer*>(p); 1108 Pl_Buffer* buf = dynamic_cast<Pl_Buffer*>(p);
1109 if (bp && buf) 1109 if (bp && buf)
1110 { 1110 {
1111 - *bp = buf->getBuffer(); 1111 + *bp = buf->getBufferSharedPointer();
1112 } 1112 }
1113 delete p; 1113 delete p;
1114 } 1114 }
@@ -1918,7 +1918,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, @@ -1918,7 +1918,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
1918 this->m->cur_data_key.length()); 1918 this->m->cur_data_key.length());
1919 pl.write(QUtil::unsigned_char_pointer(val), val.length()); 1919 pl.write(QUtil::unsigned_char_pointer(val), val.length());
1920 pl.finish(); 1920 pl.finish();
1921 - PointerHolder<Buffer> buf = bufpl.getBuffer(); 1921 + auto buf = bufpl.getBufferSharedPointer();
1922 val = QPDF_String( 1922 val = QPDF_String(
1923 std::string(reinterpret_cast<char*>(buf->getBuffer()), 1923 std::string(reinterpret_cast<char*>(buf->getBuffer()),
1924 buf->getSize())).unparse(true); 1924 buf->getSize())).unparse(true);
@@ -3231,8 +3231,8 @@ QPDFWriter::writeLinearized() @@ -3231,8 +3231,8 @@ QPDFWriter::writeLinearized()
3231 // Write file in two passes. Part numbers refer to PDF spec 1.4. 3231 // Write file in two passes. Part numbers refer to PDF spec 1.4.
3232 3232
3233 FILE* lin_pass1_file = 0; 3233 FILE* lin_pass1_file = 0;
3234 - PointerHolder<PipelinePopper> pp_pass1 = new PipelinePopper(this);  
3235 - PointerHolder<PipelinePopper> pp_md5 = new PipelinePopper(this); 3234 + auto pp_pass1 = make_pointer_holder<PipelinePopper>(this);
  3235 + auto pp_md5 = make_pointer_holder<PipelinePopper>(this);
3236 for (int pass = 1; pass <= 2; ++pass) 3236 for (int pass = 1; pass <= 2; ++pass)
3237 { 3237 {
3238 if (pass == 1) 3238 if (pass == 1)
@@ -3623,7 +3623,7 @@ QPDFWriter::registerProgressReporter(PointerHolder&lt;ProgressReporter&gt; pr) @@ -3623,7 +3623,7 @@ QPDFWriter::registerProgressReporter(PointerHolder&lt;ProgressReporter&gt; pr)
3623 void 3623 void
3624 QPDFWriter::writeStandard() 3624 QPDFWriter::writeStandard()
3625 { 3625 {
3626 - PointerHolder<PipelinePopper> pp_md5 = new PipelinePopper(this); 3626 + auto pp_md5 = make_pointer_holder<PipelinePopper>(this);
3627 if (this->m->deterministic_id) 3627 if (this->m->deterministic_id)
3628 { 3628 {
3629 pushMD5Pipeline(*pp_md5); 3629 pushMD5Pipeline(*pp_md5);
libqpdf/QPDF_Stream.cc
@@ -251,7 +251,7 @@ QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level) @@ -251,7 +251,7 @@ QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
251 "getStreamData called on unfilterable stream"); 251 "getStreamData called on unfilterable stream");
252 } 252 }
253 QTC::TC("qpdf", "QPDF_Stream getStreamData"); 253 QTC::TC("qpdf", "QPDF_Stream getStreamData");
254 - return buf.getBuffer(); 254 + return buf.getBufferSharedPointer();
255 } 255 }
256 256
257 PointerHolder<Buffer> 257 PointerHolder<Buffer>
@@ -265,7 +265,7 @@ QPDF_Stream::getRawStreamData() @@ -265,7 +265,7 @@ QPDF_Stream::getRawStreamData()
265 "error getting raw stream data"); 265 "error getting raw stream data");
266 } 266 }
267 QTC::TC("qpdf", "QPDF_Stream getRawStreamData"); 267 QTC::TC("qpdf", "QPDF_Stream getRawStreamData");
268 - return buf.getBuffer(); 268 + return buf.getBufferSharedPointer();
269 } 269 }
270 270
271 bool 271 bool
@@ -479,7 +479,7 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, bool* filterp, @@ -479,7 +479,7 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, bool* filterp,
479 479
480 if (encode_flags & qpdf_ef_normalize) 480 if (encode_flags & qpdf_ef_normalize)
481 { 481 {
482 - normalizer = new ContentNormalizer(); 482 + normalizer = make_pointer_holder<ContentNormalizer>();
483 new_pipeline = std::make_shared<Pl_QPDFTokenizer>( 483 new_pipeline = std::make_shared<Pl_QPDFTokenizer>(
484 "normalizer", normalizer.get(), pipeline); 484 "normalizer", normalizer.get(), pipeline);
485 to_delete.push_back(new_pipeline); 485 to_delete.push_back(new_pipeline);
libqpdf/QPDF_encryption.cc
@@ -245,7 +245,7 @@ process_with_aes(std::string const&amp; key, @@ -245,7 +245,7 @@ process_with_aes(std::string const&amp; key,
245 aes.write(QUtil::unsigned_char_pointer(data), data.length()); 245 aes.write(QUtil::unsigned_char_pointer(data), data.length());
246 } 246 }
247 aes.finish(); 247 aes.finish();
248 - PointerHolder<Buffer> bufp = buffer.getBuffer(); 248 + auto bufp = buffer.getBufferSharedPointer();
249 if (outlength == 0) 249 if (outlength == 0)
250 { 250 {
251 outlength = bufp->getSize(); 251 outlength = bufp->getSize();
@@ -1200,7 +1200,7 @@ QPDF::decryptString(std::string&amp; str, int objid, int generation) @@ -1200,7 +1200,7 @@ QPDF::decryptString(std::string&amp; str, int objid, int generation)
1200 key.length()); 1200 key.length());
1201 pl.write(QUtil::unsigned_char_pointer(str), str.length()); 1201 pl.write(QUtil::unsigned_char_pointer(str), str.length());
1202 pl.finish(); 1202 pl.finish();
1203 - PointerHolder<Buffer> buf = bufpl.getBuffer(); 1203 + auto buf = bufpl.getBufferSharedPointer();
1204 str = std::string(reinterpret_cast<char*>(buf->getBuffer()), 1204 str = std::string(reinterpret_cast<char*>(buf->getBuffer()),
1205 buf->getSize()); 1205 buf->getSize());
1206 } 1206 }
libqpdf/QPDF_linearization.cc
@@ -313,7 +313,7 @@ QPDF::readLinearizationData() @@ -313,7 +313,7 @@ QPDF::readLinearizationData()
313 QPDFObjectHandle HS = H0.getKey("/S"); // shared object 313 QPDFObjectHandle HS = H0.getKey("/S"); // shared object
314 QPDFObjectHandle HO = H0.getKey("/O"); // outline 314 QPDFObjectHandle HO = H0.getKey("/O"); // outline
315 315
316 - PointerHolder<Buffer> hbp = pb.getBuffer(); 316 + auto hbp = pb.getBufferSharedPointer();
317 Buffer* hb = hbp.get(); 317 Buffer* hb = hbp.get();
318 unsigned char const* h_buf = hb->getBuffer(); 318 unsigned char const* h_buf = hb->getBuffer();
319 size_t h_size = hb->getSize(); 319 size_t h_size = hb->getSize();
@@ -2282,5 +2282,5 @@ QPDF::generateHintStream(std::map&lt;int, QPDFXRefEntry&gt; const&amp; xref, @@ -2282,5 +2282,5 @@ QPDF::generateHintStream(std::map&lt;int, QPDFXRefEntry&gt; const&amp; xref,
2282 } 2282 }
2283 c.finish(); 2283 c.finish();
2284 2284
2285 - hint_buffer = hint_stream.getBuffer(); 2285 + hint_buffer = hint_stream.getBufferSharedPointer();
2286 } 2286 }
libqpdf/qpdf-c.cc
@@ -104,12 +104,13 @@ static void call_read_memory(qpdf_data qpdf) @@ -104,12 +104,13 @@ static void call_read_memory(qpdf_data qpdf)
104 // must set qpdf->filename 104 // must set qpdf->filename
105 static void call_init_write(qpdf_data qpdf) 105 static void call_init_write(qpdf_data qpdf)
106 { 106 {
107 - qpdf->qpdf_writer = new QPDFWriter(*(qpdf->qpdf), qpdf->filename); 107 + qpdf->qpdf_writer = make_pointer_holder<QPDFWriter>(
  108 + *(qpdf->qpdf), qpdf->filename);
108 } 109 }
109 110
110 static void call_init_write_memory(qpdf_data qpdf) 111 static void call_init_write_memory(qpdf_data qpdf)
111 { 112 {
112 - qpdf->qpdf_writer = new QPDFWriter(*(qpdf->qpdf)); 113 + qpdf->qpdf_writer = make_pointer_holder<QPDFWriter>(*(qpdf->qpdf));
113 qpdf->qpdf_writer->setOutputMemory(); 114 qpdf->qpdf_writer->setOutputMemory();
114 } 115 }
115 116
@@ -137,17 +138,19 @@ static QPDF_ERROR_CODE trap_errors( @@ -137,17 +138,19 @@ static QPDF_ERROR_CODE trap_errors(
137 } 138 }
138 catch (QPDFExc& e) 139 catch (QPDFExc& e)
139 { 140 {
140 - qpdf->error = new QPDFExc(e); 141 + qpdf->error = make_pointer_holder<QPDFExc>(e);
141 status |= QPDF_ERRORS; 142 status |= QPDF_ERRORS;
142 } 143 }
143 catch (std::runtime_error& e) 144 catch (std::runtime_error& e)
144 { 145 {
145 - qpdf->error = new QPDFExc(qpdf_e_system, "", "", 0, e.what()); 146 + qpdf->error = make_pointer_holder<QPDFExc>(
  147 + qpdf_e_system, "", "", 0, e.what());
146 status |= QPDF_ERRORS; 148 status |= QPDF_ERRORS;
147 } 149 }
148 catch (std::exception& e) 150 catch (std::exception& e)
149 { 151 {
150 - qpdf->error = new QPDFExc(qpdf_e_internal, "", "", 0, e.what()); 152 + qpdf->error = make_pointer_holder<QPDFExc>(
  153 + qpdf_e_internal, "", "", 0, e.what());
151 status |= QPDF_ERRORS; 154 status |= QPDF_ERRORS;
152 } 155 }
153 156
@@ -169,7 +172,7 @@ qpdf_data qpdf_init() @@ -169,7 +172,7 @@ qpdf_data qpdf_init()
169 { 172 {
170 QTC::TC("qpdf", "qpdf-c called qpdf_init"); 173 QTC::TC("qpdf", "qpdf-c called qpdf_init");
171 qpdf_data qpdf = new _qpdf_data(); 174 qpdf_data qpdf = new _qpdf_data();
172 - qpdf->qpdf = new QPDF(); 175 + qpdf->qpdf = make_pointer_holder<QPDF>();
173 return qpdf; 176 return qpdf;
174 } 177 }
175 178
@@ -240,7 +243,8 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf) @@ -240,7 +243,8 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf)
240 { 243 {
241 if (qpdf_more_warnings(qpdf)) 244 if (qpdf_more_warnings(qpdf))
242 { 245 {
243 - qpdf->tmp_error.exc = new QPDFExc(qpdf->warnings.front()); 246 + qpdf->tmp_error.exc = make_pointer_holder<QPDFExc>(
  247 + qpdf->warnings.front());
244 qpdf->warnings.pop_front(); 248 qpdf->warnings.pop_front();
245 QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning"); 249 QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning");
246 return &qpdf->tmp_error; 250 return &qpdf->tmp_error;
@@ -543,7 +547,7 @@ static void qpdf_get_buffer_internal(qpdf_data qpdf) @@ -543,7 +547,7 @@ static void qpdf_get_buffer_internal(qpdf_data qpdf)
543 { 547 {
544 if (qpdf->write_memory && (qpdf->output_buffer == 0)) 548 if (qpdf->write_memory && (qpdf->output_buffer == 0))
545 { 549 {
546 - qpdf->output_buffer = qpdf->qpdf_writer->getBuffer(); 550 + qpdf->output_buffer = qpdf->qpdf_writer->getBufferSharedPointer();
547 } 551 }
548 } 552 }
549 553
@@ -852,7 +856,8 @@ void qpdf_register_progress_reporter( @@ -852,7 +856,8 @@ void qpdf_register_progress_reporter(
852 { 856 {
853 QTC::TC("qpdf", "qpdf-c registered progress reporter"); 857 QTC::TC("qpdf", "qpdf-c registered progress reporter");
854 qpdf->qpdf_writer->registerProgressReporter( 858 qpdf->qpdf_writer->registerProgressReporter(
855 - new ProgressReporter(report_progress, data)); 859 + PointerHolder<QPDFWriter::ProgressReporter>(
  860 + new ProgressReporter(report_progress, data)));
856 } 861 }
857 862
858 QPDF_ERROR_CODE qpdf_write(qpdf_data qpdf) 863 QPDF_ERROR_CODE qpdf_write(qpdf_data qpdf)
@@ -911,7 +916,7 @@ static qpdf_oh @@ -911,7 +916,7 @@ static qpdf_oh
911 new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh) 916 new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh)
912 { 917 {
913 qpdf_oh oh = ++qpdf->next_oh; // never return 0 918 qpdf_oh oh = ++qpdf->next_oh; // never return 0
914 - qpdf->oh_cache[oh] = new QPDFObjectHandle(qoh); 919 + qpdf->oh_cache[oh] = make_pointer_holder<QPDFObjectHandle>(qoh);
915 return oh; 920 return oh;
916 } 921 }
917 922
libtests/concatenate.cc
@@ -20,12 +20,12 @@ int main(int argc, char* argv[]) @@ -20,12 +20,12 @@ int main(int argc, char* argv[])
20 pipeStringAndFinish(&concat, "-two-"); 20 pipeStringAndFinish(&concat, "-two-");
21 concat.manualFinish(); 21 concat.manualFinish();
22 22
23 - PointerHolder<Buffer> b1_buf = b1.getBuffer(); 23 + auto b1_buf = b1.getBufferSharedPointer();
24 Pl_Buffer b2("uncompressed"); 24 Pl_Buffer b2("uncompressed");
25 Pl_Flate inflate("uncompress", &b2, Pl_Flate::a_inflate); 25 Pl_Flate inflate("uncompress", &b2, Pl_Flate::a_inflate);
26 inflate.write(b1_buf->getBuffer(), b1_buf->getSize()); 26 inflate.write(b1_buf->getBuffer(), b1_buf->getSize());
27 inflate.finish(); 27 inflate.finish();
28 - PointerHolder<Buffer> b2_buf = b2.getBuffer(); 28 + auto b2_buf = b2.getBufferSharedPointer();
29 std::string result(reinterpret_cast<char*>(b2_buf->getBuffer()), 29 std::string result(reinterpret_cast<char*>(b2_buf->getBuffer()),
30 b2_buf->getSize()); 30 b2_buf->getSize());
31 if (result == "-one--two-") 31 if (result == "-one--two-")
libtests/input_source.cc
@@ -65,8 +65,8 @@ int main() @@ -65,8 +65,8 @@ int main()
65 // Overlap so that the first check() would advance past the start 65 // Overlap so that the first check() would advance past the start
66 // of the next match 66 // of the next match
67 memcpy(b + 2037, "potato potato salad ", 20); 67 memcpy(b + 2037, "potato potato salad ", 20);
68 - PointerHolder<InputSource> is =  
69 - new BufferInputSource("test buffer input source", b1.get()); 68 + auto is = PointerHolder<InputSource>(
  69 + new BufferInputSource("test buffer input source", b1.get()));
70 Finder f1(is, "salad"); 70 Finder f1(is, "salad");
71 check("find potato salad", true, 71 check("find potato salad", true,
72 is->findFirst("potato", 0, 0, f1)); 72 is->findFirst("potato", 0, 0, f1));
libtests/qutil.cc
@@ -545,7 +545,7 @@ void read_from_file_test() @@ -545,7 +545,7 @@ void read_from_file_test()
545 Pl_Buffer b2("buffer"); 545 Pl_Buffer b2("buffer");
546 // QUtil::file_provider also exercises QUtil::pipe_file 546 // QUtil::file_provider also exercises QUtil::pipe_file
547 QUtil::file_provider("other-file")(&b2); 547 QUtil::file_provider("other-file")(&b2);
548 - PointerHolder<Buffer> buf2 = b2.getBuffer(); 548 + auto buf2 = b2.getBufferSharedPointer();
549 assert(buf2->getSize() == size); 549 assert(buf2->getSize() == size);
550 assert(memcmp(buf2->getBuffer(), p, size) == 0); 550 assert(memcmp(buf2->getBuffer(), p, size) == 0);
551 } 551 }
qpdf/test_driver.cc
@@ -294,7 +294,7 @@ static void test_0_1(QPDF&amp; pdf, char const* arg2) @@ -294,7 +294,7 @@ static void test_0_1(QPDF&amp; pdf, char const* arg2)
294 std::cout << "Raw stream data:" << std::endl; 294 std::cout << "Raw stream data:" << std::endl;
295 std::cout.flush(); 295 std::cout.flush();
296 QUtil::binary_stdout(); 296 QUtil::binary_stdout();
297 - PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("raw", stdout); 297 + auto out = make_pointer_holder<Pl_StdioFile>("raw", stdout);
298 qtest.pipeStreamData(out.get(), 0, qpdf_dl_none); 298 qtest.pipeStreamData(out.get(), 0, qpdf_dl_none);
299 299
300 std::cout << std::endl << "Uncompressed stream data:" << std::endl; 300 std::cout << std::endl << "Uncompressed stream data:" << std::endl;
@@ -302,7 +302,7 @@ static void test_0_1(QPDF&amp; pdf, char const* arg2) @@ -302,7 +302,7 @@ static void test_0_1(QPDF&amp; pdf, char const* arg2)
302 { 302 {
303 std::cout.flush(); 303 std::cout.flush();
304 QUtil::binary_stdout(); 304 QUtil::binary_stdout();
305 - out = new Pl_StdioFile("filtered", stdout); 305 + out = make_pointer_holder<Pl_StdioFile>("filtered", stdout);
306 qtest.pipeStreamData(out.get(), 0, qpdf_dl_all); 306 qtest.pipeStreamData(out.get(), 0, qpdf_dl_all);
307 std::cout << std::endl << "End of stream data" << std::endl; 307 std::cout << std::endl << "End of stream data" << std::endl;
308 } 308 }
@@ -343,7 +343,7 @@ static void test_2(QPDF&amp; pdf, char const* arg2) @@ -343,7 +343,7 @@ static void test_2(QPDF&amp; pdf, char const* arg2)
343 QPDFObjectHandle page = kids.getArrayItem(1); // second page 343 QPDFObjectHandle page = kids.getArrayItem(1); // second page
344 QPDFObjectHandle contents = page.getKey("/Contents"); 344 QPDFObjectHandle contents = page.getKey("/Contents");
345 QUtil::binary_stdout(); 345 QUtil::binary_stdout();
346 - PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("filtered", stdout); 346 + auto out = make_pointer_holder<Pl_StdioFile>("filtered", stdout);
347 contents.pipeStreamData(out.get(), 0, qpdf_dl_generalized); 347 contents.pipeStreamData(out.get(), 0, qpdf_dl_generalized);
348 } 348 }
349 349
@@ -356,8 +356,8 @@ static void test_3(QPDF&amp; pdf, char const* arg2) @@ -356,8 +356,8 @@ static void test_3(QPDF&amp; pdf, char const* arg2)
356 std::cout << "-- stream " << i << " --" << std::endl; 356 std::cout << "-- stream " << i << " --" << std::endl;
357 std::cout.flush(); 357 std::cout.flush();
358 QUtil::binary_stdout(); 358 QUtil::binary_stdout();
359 - PointerHolder<Pl_StdioFile> out =  
360 - new Pl_StdioFile("tokenized stream", stdout); 359 + auto out = make_pointer_holder<Pl_StdioFile>(
  360 + "tokenized stream", stdout);
361 stream.pipeStreamData(out.get(), 361 stream.pipeStreamData(out.get(),
362 qpdf_ef_normalize, qpdf_dl_generalized); 362 qpdf_ef_normalize, qpdf_dl_generalized);
363 } 363 }
@@ -538,11 +538,11 @@ static void test_8(QPDF&amp; pdf, char const* arg2) @@ -538,11 +538,11 @@ static void test_8(QPDF&amp; pdf, char const* arg2)
538 p2.write(QUtil::unsigned_char_pointer("new data for stream\n"), 538 p2.write(QUtil::unsigned_char_pointer("new data for stream\n"),
539 20); // no null! 539 20); // no null!
540 p2.finish(); 540 p2.finish();
541 - PointerHolder<Buffer> b = p1.getBuffer(); 541 + auto b = p1.getBufferSharedPointer();
542 // This is a bogus way to use StreamDataProvider, but it does 542 // This is a bogus way to use StreamDataProvider, but it does
543 // adequately test its functionality. 543 // adequately test its functionality.
544 Provider* provider = new Provider(b); 544 Provider* provider = new Provider(b);
545 - PointerHolder<QPDFObjectHandle::StreamDataProvider> p = provider; 545 + auto p = PointerHolder<QPDFObjectHandle::StreamDataProvider>(provider);
546 qstream.replaceStreamData( 546 qstream.replaceStreamData(
547 p, QPDFObjectHandle::newName("/FlateDecode"), 547 p, QPDFObjectHandle::newName("/FlateDecode"),
548 QPDFObjectHandle::newNull()); 548 QPDFObjectHandle::newNull());
@@ -572,7 +572,7 @@ static void test_9(QPDF&amp; pdf, char const* arg2) @@ -572,7 +572,7 @@ static void test_9(QPDF&amp; pdf, char const* arg2)
572 { 572 {
573 QPDFObjectHandle root = pdf.getRoot(); 573 QPDFObjectHandle root = pdf.getRoot();
574 // Explicitly exercise the Buffer version of newStream 574 // Explicitly exercise the Buffer version of newStream
575 - PointerHolder<Buffer> buf = new Buffer(20); 575 + auto buf = make_pointer_holder<Buffer>(20U);
576 unsigned char* bp = buf->getBuffer(); 576 unsigned char* bp = buf->getBuffer();
577 memcpy(bp, "data for new stream\n", 20); // no null! 577 memcpy(bp, "data for new stream\n", 20); // no null!
578 QPDFObjectHandle qstream = QPDFObjectHandle::newStream( 578 QPDFObjectHandle qstream = QPDFObjectHandle::newStream(
@@ -1100,9 +1100,9 @@ static void test_27(QPDF&amp; pdf, char const* arg2) @@ -1100,9 +1100,9 @@ static void test_27(QPDF&amp; pdf, char const* arg2)
1100 pl.write(QUtil::unsigned_char_pointer("new data for stream\n"), 1100 pl.write(QUtil::unsigned_char_pointer("new data for stream\n"),
1101 20); // no null! 1101 20); // no null!
1102 pl.finish(); 1102 pl.finish();
1103 - PointerHolder<Buffer> b = pl.getBuffer(); 1103 + auto b = pl.getBufferSharedPointer();
1104 Provider* provider = new Provider(b); 1104 Provider* provider = new Provider(b);
1105 - p1 = provider; 1105 + p1 = decltype(p1)(provider);
1106 } 1106 }
1107 // Create a stream that uses a provider in empty1 and copy it 1107 // Create a stream that uses a provider in empty1 and copy it
1108 // to empty2. It is copied from empty2 to the final pdf. 1108 // to empty2. It is copied from empty2 to the final pdf.
@@ -1129,9 +1129,9 @@ static void test_27(QPDF&amp; pdf, char const* arg2) @@ -1129,9 +1129,9 @@ static void test_27(QPDF&amp; pdf, char const* arg2)
1129 "more data for stream\n"), 1129 "more data for stream\n"),
1130 21); // no null! 1130 21); // no null!
1131 pl.finish(); 1131 pl.finish();
1132 - PointerHolder<Buffer> b = pl.getBuffer(); 1132 + auto b = pl.getBufferSharedPointer();
1133 Provider* provider = new Provider(b); 1133 Provider* provider = new Provider(b);
1134 - p2 = provider; 1134 + p2 = decltype(p2)(provider);
1135 } 1135 }
1136 QPDF empty3; 1136 QPDF empty3;
1137 empty3.emptyPDF(); 1137 empty3.emptyPDF();
@@ -1315,7 +1315,7 @@ static void test_33(QPDF&amp; pdf, char const* arg2) @@ -1315,7 +1315,7 @@ static void test_33(QPDF&amp; pdf, char const* arg2)
1315 w.setStaticID(true); 1315 w.setStaticID(true);
1316 w.setOutputPipeline(&p); 1316 w.setOutputPipeline(&p);
1317 w.write(); 1317 w.write();
1318 - PointerHolder<Buffer> b = p.getBuffer(); 1318 + auto b = p.getBufferSharedPointer();
1319 FILE* f = QUtil::safe_fopen("a.pdf", "wb"); 1319 FILE* f = QUtil::safe_fopen("a.pdf", "wb");
1320 fwrite(b->getBuffer(), b->getSize(), 1, f); 1320 fwrite(b->getBuffer(), b->getSize(), 1, f);
1321 fclose(f); 1321 fclose(f);
@@ -1414,7 +1414,7 @@ static void test_36(QPDF&amp; pdf, char const* arg2) @@ -1414,7 +1414,7 @@ static void test_36(QPDF&amp; pdf, char const* arg2)
1414 Pl_Buffer p1("buffer"); 1414 Pl_Buffer p1("buffer");
1415 Pl_Flate p2("compress", &p1, Pl_Flate::a_inflate); 1415 Pl_Flate p2("compress", &p1, Pl_Flate::a_inflate);
1416 stream.pipeStreamData(&p2, 0, qpdf_dl_none); 1416 stream.pipeStreamData(&p2, 0, qpdf_dl_none);
1417 - PointerHolder<Buffer> buf = p1.getBuffer(); 1417 + auto buf = p1.getBufferSharedPointer();
1418 std::string data = std::string( 1418 std::string data = std::string(
1419 reinterpret_cast<char const*>(buf->getBuffer()), 1419 reinterpret_cast<char const*>(buf->getBuffer()),
1420 buf->getSize()); 1420 buf->getSize());
@@ -1497,7 +1497,8 @@ static void test_41(QPDF&amp; pdf, char const* arg2) @@ -1497,7 +1497,8 @@ static void test_41(QPDF&amp; pdf, char const* arg2)
1497 pages.begin(); 1497 pages.begin();
1498 iter != pages.end(); ++iter) 1498 iter != pages.end(); ++iter)
1499 { 1499 {
1500 - (*iter).addContentTokenFilter(new TokenFilter); 1500 + (*iter).addContentTokenFilter(
  1501 + PointerHolder<QPDFObjectHandle::TokenFilter>(new TokenFilter()));
1501 } 1502 }
1502 QPDFWriter w(pdf, "a.pdf"); 1503 QPDFWriter w(pdf, "a.pdf");
1503 w.setQDFMode(true); 1504 w.setQDFMode(true);
@@ -2727,11 +2728,15 @@ static void test_72(QPDF&amp; pdf, char const* arg2) @@ -2727,11 +2728,15 @@ static void test_72(QPDF&amp; pdf, char const* arg2)
2727 Pl_Buffer b("buffer"); 2728 Pl_Buffer b("buffer");
2728 if (i == 0) 2729 if (i == 0)
2729 { 2730 {
2730 - fx1.addContentTokenFilter(new TokenFilter); 2731 + fx1.addContentTokenFilter(
  2732 + PointerHolder<QPDFObjectHandle::TokenFilter>(
  2733 + new TokenFilter()));
2731 } 2734 }
2732 else 2735 else
2733 { 2736 {
2734 - fx1.getObjectHandle().addTokenFilter(new TokenFilter); 2737 + fx1.getObjectHandle().addTokenFilter(
  2738 + PointerHolder<QPDFObjectHandle::TokenFilter>(
  2739 + new TokenFilter()));
2735 } 2740 }
2736 fx1.pipeContents(&b); 2741 fx1.pipeContents(&b);
2737 std::unique_ptr<Buffer> buf(b.getBuffer()); 2742 std::unique_ptr<Buffer> buf(b.getBuffer());
@@ -2890,7 +2895,7 @@ static void test_76(QPDF&amp; pdf, char const* arg2) @@ -2890,7 +2895,7 @@ static void test_76(QPDF&amp; pdf, char const* arg2)
2890 p.write(QUtil::unsigned_char_pointer("from buffer"), 11); 2895 p.write(QUtil::unsigned_char_pointer("from buffer"), 11);
2891 p.finish(); 2896 p.finish();
2892 auto efs3 = QPDFEFStreamObjectHelper::createEFStream( 2897 auto efs3 = QPDFEFStreamObjectHelper::createEFStream(
2893 - pdf, p.getBuffer()); 2898 + pdf, p.getBufferSharedPointer());
2894 efs3.setSubtype("text/plain"); 2899 efs3.setSubtype("text/plain");
2895 efdh.replaceEmbeddedFile( 2900 efdh.replaceEmbeddedFile(
2896 "att2", QPDFFileSpecObjectHelper::createFileSpec( 2901 "att2", QPDFFileSpecObjectHelper::createFileSpec(
@@ -3007,7 +3012,7 @@ static void test_79(QPDF&amp; pdf, char const* arg2) @@ -3007,7 +3012,7 @@ static void test_79(QPDF&amp; pdf, char const* arg2)
3007 Pl_Buffer b("buffer"); 3012 Pl_Buffer b("buffer");
3008 b.write(QUtil::unsigned_char_pointer("from buffer"), 11); 3013 b.write(QUtil::unsigned_char_pointer("from buffer"), 11);
3009 b.finish(); 3014 b.finish();
3010 - PointerHolder<Buffer> bp = b.getBuffer(); 3015 + auto bp = b.getBufferSharedPointer();
3011 auto s3 = QPDFObjectHandle::newStream(&pdf, bp); 3016 auto s3 = QPDFObjectHandle::newStream(&pdf, bp);
3012 3017
3013 std::vector<QPDFObjectHandle> streams = {s1, s2, s3}; 3018 std::vector<QPDFObjectHandle> streams = {s1, s2, s3};
qpdf/test_renumber.cc
@@ -300,7 +300,7 @@ int main(int argc, char *argv[]) @@ -300,7 +300,7 @@ int main(int argc, char *argv[])
300 300
301 std::map<QPDFObjGen, QPDFXRefEntry> xrefs_w 301 std::map<QPDFObjGen, QPDFXRefEntry> xrefs_w
302 = w.getWrittenXRefTable(); 302 = w.getWrittenXRefTable();
303 - PointerHolder<Buffer> buf = w.getBuffer(); 303 + auto buf = w.getBufferSharedPointer();
304 304
305 QPDF qpdf_ren; 305 QPDF qpdf_ren;
306 qpdf_ren.processMemoryFile("renumbered", 306 qpdf_ren.processMemoryFile("renumbered",
qpdf/test_tokenizer.cc
@@ -205,7 +205,7 @@ static void process(char const* filename, bool include_ignorable, @@ -205,7 +205,7 @@ static void process(char const* filename, bool include_ignorable,
205 // Tokenize file, skipping streams 205 // Tokenize file, skipping streams
206 FileInputSource* fis = new FileInputSource(); 206 FileInputSource* fis = new FileInputSource();
207 fis->setFilename(filename); 207 fis->setFilename(filename);
208 - is = fis; 208 + is = PointerHolder<InputSource>(fis);
209 dump_tokens(is, "FILE", max_len, include_ignorable, true, false); 209 dump_tokens(is, "FILE", max_len, include_ignorable, true, false);
210 210
211 // Tokenize content streams, skipping inline images 211 // Tokenize content streams, skipping inline images
@@ -220,10 +220,10 @@ static void process(char const* filename, bool include_ignorable, @@ -220,10 +220,10 @@ static void process(char const* filename, bool include_ignorable,
220 ++pageno; 220 ++pageno;
221 Pl_Buffer plb("buffer"); 221 Pl_Buffer plb("buffer");
222 (*iter).pipeContents(&plb); 222 (*iter).pipeContents(&plb);
223 - PointerHolder<Buffer> content_data = plb.getBuffer(); 223 + auto content_data = plb.getBufferSharedPointer();
224 BufferInputSource* bis = new BufferInputSource( 224 BufferInputSource* bis = new BufferInputSource(
225 "content data", content_data.get()); 225 "content data", content_data.get());
226 - is = bis; 226 + is = PointerHolder<InputSource>(bis);
227 dump_tokens(is, "PAGE " + QUtil::int_to_string(pageno), 227 dump_tokens(is, "PAGE " + QUtil::int_to_string(pageno),
228 max_len, include_ignorable, false, true); 228 max_len, include_ignorable, false, true);
229 } 229 }
@@ -241,7 +241,7 @@ static void process(char const* filename, bool include_ignorable, @@ -241,7 +241,7 @@ static void process(char const* filename, bool include_ignorable,
241 (*iter).getStreamData(qpdf_dl_specialized); 241 (*iter).getStreamData(qpdf_dl_specialized);
242 BufferInputSource* bis = new BufferInputSource( 242 BufferInputSource* bis = new BufferInputSource(
243 "object stream data", b.get()); 243 "object stream data", b.get());
244 - is = bis; 244 + is = PointerHolder<InputSource>(bis);
245 dump_tokens(is, "OBJECT STREAM " + 245 dump_tokens(is, "OBJECT STREAM " +
246 QUtil::int_to_string((*iter).getObjectID()), 246 QUtil::int_to_string((*iter).getObjectID()),
247 max_len, include_ignorable, false, false); 247 max_len, include_ignorable, false, false);
zlib-flate/zlib-flate.cc
@@ -75,9 +75,8 @@ int main(int argc, char* argv[]) @@ -75,9 +75,8 @@ int main(int argc, char* argv[])
75 75
76 QUtil::binary_stdout(); 76 QUtil::binary_stdout();
77 QUtil::binary_stdin(); 77 QUtil::binary_stdin();
78 - PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("stdout", stdout);  
79 - PointerHolder<Pl_Flate> flate =  
80 - new Pl_Flate("flate", out.get(), action); 78 + auto out = make_pointer_holder<Pl_StdioFile>("stdout", stdout);
  79 + auto flate = make_pointer_holder<Pl_Flate>("flate", out.get(), action);
81 bool warn = false; 80 bool warn = false;
82 flate->setWarnCallback([&warn](char const* msg, int code) { 81 flate->setWarnCallback([&warn](char const* msg, int code) {
83 warn = true; 82 warn = true;