Commit ba0ef7a124e9aecc2d0113598c851bae4710b887

Authored by Jay Berkenbilt
1 parent a68703b0

Replace PointerHolder with std::shared_ptr in the rest of the code

Increase to POINTERHOLDER_TRANSITION=3

patrepl s/PointerHolder/std::shared_ptr/g **/*.cc **/*.hh
patrepl s/make_pointer_holder/std::make_shared/g **/*.cc
patrepl s/make_array_pointer_holder/QUtil::make_shared_array/g **/*.cc
patrepl s,qpdf/std::shared_ptr,qpdf/PointerHolder, **/*.cc **/*.hh
git restore include/qpdf/PointerHolder.hh
git restore libtests/pointer_holder.cc
cleanpatch
./format-code
CMakeLists.txt
@@ -108,7 +108,7 @@ if(NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS)) @@ -108,7 +108,7 @@ if(NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS))
108 FATAL_ERROR "At least one of static or shared libraries must be built") 108 FATAL_ERROR "At least one of static or shared libraries must be built")
109 endif() 109 endif()
110 110
111 -add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:POINTERHOLDER_TRANSITION=2>) 111 +add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:POINTERHOLDER_TRANSITION=3>)
112 112
113 enable_testing() 113 enable_testing()
114 set(RUN_QTEST perl ${qpdf_SOURCE_DIR}/run-qtest) 114 set(RUN_QTEST perl ${qpdf_SOURCE_DIR}/run-qtest)
examples/pdf-create.cc
@@ -176,7 +176,7 @@ add_page( @@ -176,7 +176,7 @@ add_page(
176 // with /FlateDecode if we don't provide any other form of 176 // with /FlateDecode if we don't provide any other form of
177 // compression. 177 // compression.
178 ImageProvider* p = new ImageProvider(color_space, filter); 178 ImageProvider* p = new ImageProvider(color_space, filter);
179 - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider(p); 179 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider(p);
180 size_t width = p->getWidth(); 180 size_t width = p->getWidth();
181 size_t height = p->getHeight(); 181 size_t height = p->getHeight();
182 QPDFObjectHandle image = QPDFObjectHandle::newStream(&pdf); 182 QPDFObjectHandle image = QPDFObjectHandle::newStream(&pdf);
@@ -296,10 +296,10 @@ check( @@ -296,10 +296,10 @@ check(
296 // Check image data 296 // Check image data
297 auto actual_data = image.getStreamData(qpdf_dl_all); 297 auto actual_data = image.getStreamData(qpdf_dl_all);
298 ImageProvider* p = new ImageProvider(desired_color_space, "null"); 298 ImageProvider* p = new ImageProvider(desired_color_space, "null");
299 - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider(p); 299 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider(p);
300 Pl_Buffer b_p("get image data"); 300 Pl_Buffer b_p("get image data");
301 provider->provideStreamData(0, 0, &b_p); 301 provider->provideStreamData(0, 0, &b_p);
302 - PointerHolder<Buffer> desired_data(b_p.getBuffer()); 302 + std::shared_ptr<Buffer> desired_data(b_p.getBuffer());
303 303
304 if (desired_data->getSize() != actual_data->getSize()) { 304 if (desired_data->getSize() != actual_data->getSize()) {
305 std::cout << "page " << pageno << ": image data length mismatch" 305 std::cout << "page " << pageno << ": image data length mismatch"
examples/pdf-custom-filter.cc
@@ -205,7 +205,7 @@ class StreamReplacer: public QPDFObjectHandle::StreamDataProvider @@ -205,7 +205,7 @@ class StreamReplacer: public QPDFObjectHandle::StreamDataProvider
205 205
206 void registerStream( 206 void registerStream(
207 QPDFObjectHandle stream, 207 QPDFObjectHandle stream,
208 - PointerHolder<QPDFObjectHandle::StreamDataProvider> self); 208 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> self);
209 209
210 private: 210 private:
211 bool maybeReplace( 211 bool maybeReplace(
@@ -283,7 +283,7 @@ StreamReplacer::maybeReplace( @@ -283,7 +283,7 @@ StreamReplacer::maybeReplace(
283 // make all its decisions from the stream dictionary. However, 283 // make all its decisions from the stream dictionary. However,
284 // it's a good idea to make sure we can retrieve the filtered data 284 // it's a good idea to make sure we can retrieve the filtered data
285 // if we are going to need it later. 285 // if we are going to need it later.
286 - PointerHolder<Buffer> out; 286 + std::shared_ptr<Buffer> out;
287 try { 287 try {
288 out = stream.getStreamData(); 288 out = stream.getStreamData();
289 } catch (...) { 289 } catch (...) {
@@ -321,7 +321,7 @@ StreamReplacer::maybeReplace( @@ -321,7 +321,7 @@ StreamReplacer::maybeReplace(
321 void 321 void
322 StreamReplacer::registerStream( 322 StreamReplacer::registerStream(
323 QPDFObjectHandle stream, 323 QPDFObjectHandle stream,
324 - PointerHolder<QPDFObjectHandle::StreamDataProvider> self) 324 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> self)
325 { 325 {
326 QPDFObjGen og(stream.getObjGen()); 326 QPDFObjGen og(stream.getObjGen());
327 327
@@ -409,10 +409,10 @@ process( @@ -409,10 +409,10 @@ process(
409 qpdf.processFile(infilename); 409 qpdf.processFile(infilename);
410 410
411 // Create a single StreamReplacer instance. The interface requires 411 // Create a single StreamReplacer instance. The interface requires
412 - // a PointerHolder in various places, so allocate a StreamReplacer  
413 - // and stash it in a PointerHolder. 412 + // a std::shared_ptr in various places, so allocate a StreamReplacer
  413 + // and stash it in a std::shared_ptr.
414 StreamReplacer* replacer = new StreamReplacer(&qpdf); 414 StreamReplacer* replacer = new StreamReplacer(&qpdf);
415 - PointerHolder<QPDFObjectHandle::StreamDataProvider> p(replacer); 415 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> p(replacer);
416 416
417 for (auto& o : qpdf.getAllObjects()) { 417 for (auto& o : qpdf.getAllObjects()) {
418 if (o.isStream()) { 418 if (o.isStream()) {
examples/pdf-filter-tokens.cc
@@ -207,10 +207,11 @@ main(int argc, char* argv[]) @@ -207,10 +207,11 @@ main(int argc, char* argv[])
207 // details. 207 // details.
208 QPDFPageObjectHelper& page(*iter); 208 QPDFPageObjectHelper& page(*iter);
209 page.addContentTokenFilter( 209 page.addContentTokenFilter(
210 - PointerHolder<QPDFObjectHandle::TokenFilter>( 210 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(
211 new StringReverser)); 211 new StringReverser));
212 page.addContentTokenFilter( 212 page.addContentTokenFilter(
213 - PointerHolder<QPDFObjectHandle::TokenFilter>(new ColorToGray)); 213 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(
  214 + new ColorToGray));
214 } 215 }
215 216
216 QPDFWriter w(pdf, outfilename); 217 QPDFWriter w(pdf, outfilename);
examples/pdf-invert-images.cc
@@ -41,7 +41,7 @@ class ImageInverter: public QPDFObjectHandle::StreamDataProvider @@ -41,7 +41,7 @@ class ImageInverter: public QPDFObjectHandle::StreamDataProvider
41 41
42 void registerImage( 42 void registerImage(
43 QPDFObjectHandle image, 43 QPDFObjectHandle image,
44 - PointerHolder<QPDFObjectHandle::StreamDataProvider> self); 44 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> self);
45 45
46 private: 46 private:
47 std::map<QPDFObjGen, QPDFObjectHandle> copied_images; 47 std::map<QPDFObjGen, QPDFObjectHandle> copied_images;
@@ -50,14 +50,14 @@ class ImageInverter: public QPDFObjectHandle::StreamDataProvider @@ -50,14 +50,14 @@ class ImageInverter: public QPDFObjectHandle::StreamDataProvider
50 void 50 void
51 ImageInverter::registerImage( 51 ImageInverter::registerImage(
52 QPDFObjectHandle image, 52 QPDFObjectHandle image,
53 - PointerHolder<QPDFObjectHandle::StreamDataProvider> self) 53 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> self)
54 { 54 {
55 // replaceStreamData requires a pointer holder to the stream data 55 // replaceStreamData requires a pointer holder to the stream data
56 // provider, but there's no way for us to generate one ourselves, 56 // provider, but there's no way for us to generate one ourselves,
57 // so we have to have it handed to us. Don't be tempted to have 57 // so we have to have it handed to us. Don't be tempted to have
58 - // the class contain a PointerHolder to itself as a member. Doing 58 + // the class contain a std::shared_ptr to itself as a member. Doing
59 // this will prevent the class from ever being deleted since the 59 // this will prevent the class from ever being deleted since the
60 - // reference count will never drop to zero (and PointerHolder 60 + // reference count will never drop to zero (and std::shared_ptr
61 // doesn't have weak references). 61 // doesn't have weak references).
62 62
63 QPDFObjGen og(image.getObjGen()); 63 QPDFObjGen og(image.getObjGen());
@@ -90,7 +90,7 @@ ImageInverter::provideStreamData(int objid, int generation, Pipeline* pipeline) @@ -90,7 +90,7 @@ ImageInverter::provideStreamData(int objid, int generation, Pipeline* pipeline)
90 // image data. Then invert the image data and write the inverted 90 // image data. Then invert the image data and write the inverted
91 // data to the pipeline. 91 // data to the pipeline.
92 QPDFObjGen og(objid, generation); 92 QPDFObjGen og(objid, generation);
93 - PointerHolder<Buffer> data = 93 + std::shared_ptr<Buffer> data =
94 this->copied_images[og].getStreamData(qpdf_dl_all); 94 this->copied_images[og].getStreamData(qpdf_dl_all);
95 size_t size = data->getSize(); 95 size_t size = data->getSize();
96 unsigned char* buf = data->getBuffer(); 96 unsigned char* buf = data->getBuffer();
@@ -128,7 +128,7 @@ main(int argc, char* argv[]) @@ -128,7 +128,7 @@ main(int argc, char* argv[])
128 qpdf.processFile(infilename, password); 128 qpdf.processFile(infilename, password);
129 129
130 ImageInverter* inv = new ImageInverter; 130 ImageInverter* inv = new ImageInverter;
131 - auto p = PointerHolder<QPDFObjectHandle::StreamDataProvider>(inv); 131 + auto p = std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(inv);
132 132
133 // For each page... 133 // For each page...
134 std::vector<QPDFPageObjectHelper> pages = 134 std::vector<QPDFPageObjectHelper> pages =
fuzz/qpdf_fuzzer.cc
@@ -34,9 +34,9 @@ class FuzzHelper @@ -34,9 +34,9 @@ class FuzzHelper
34 void run(); 34 void run();
35 35
36 private: 36 private:
37 - PointerHolder<QPDF> getQpdf();  
38 - PointerHolder<QPDFWriter> getWriter(PointerHolder<QPDF>);  
39 - void doWrite(PointerHolder<QPDFWriter> w); 37 + std::shared_ptr<QPDF> getQpdf();
  38 + std::shared_ptr<QPDFWriter> getWriter(std::shared_ptr<QPDF>);
  39 + void doWrite(std::shared_ptr<QPDFWriter> w);
40 void testWrite(); 40 void testWrite();
41 void testPages(); 41 void testPages();
42 void testOutlines(); 42 void testOutlines();
@@ -52,27 +52,27 @@ FuzzHelper::FuzzHelper(unsigned char const* data, size_t size) : @@ -52,27 +52,27 @@ FuzzHelper::FuzzHelper(unsigned char const* data, size_t size) :
52 { 52 {
53 } 53 }
54 54
55 -PointerHolder<QPDF> 55 +std::shared_ptr<QPDF>
56 FuzzHelper::getQpdf() 56 FuzzHelper::getQpdf()
57 { 57 {
58 - auto is = PointerHolder<InputSource>( 58 + auto is = std::shared_ptr<InputSource>(
59 new BufferInputSource("fuzz input", &this->input_buffer)); 59 new BufferInputSource("fuzz input", &this->input_buffer));
60 - auto qpdf = make_pointer_holder<QPDF>(); 60 + auto qpdf = std::make_shared<QPDF>();
61 qpdf->processInputSource(is); 61 qpdf->processInputSource(is);
62 return qpdf; 62 return qpdf;
63 } 63 }
64 64
65 -PointerHolder<QPDFWriter>  
66 -FuzzHelper::getWriter(PointerHolder<QPDF> qpdf) 65 +std::shared_ptr<QPDFWriter>
  66 +FuzzHelper::getWriter(std::shared_ptr<QPDF> qpdf)
67 { 67 {
68 - auto w = make_pointer_holder<QPDFWriter>(*qpdf); 68 + auto w = std::make_shared<QPDFWriter>(*qpdf);
69 w->setOutputPipeline(&this->discard); 69 w->setOutputPipeline(&this->discard);
70 w->setDecodeLevel(qpdf_dl_all); 70 w->setDecodeLevel(qpdf_dl_all);
71 return w; 71 return w;
72 } 72 }
73 73
74 void 74 void
75 -FuzzHelper::doWrite(PointerHolder<QPDFWriter> w) 75 +FuzzHelper::doWrite(std::shared_ptr<QPDFWriter> w)
76 { 76 {
77 try { 77 try {
78 w->write(); 78 w->write();
@@ -88,8 +88,8 @@ FuzzHelper::testWrite() @@ -88,8 +88,8 @@ FuzzHelper::testWrite()
88 { 88 {
89 // Write in various ways to exercise QPDFWriter 89 // Write in various ways to exercise QPDFWriter
90 90
91 - PointerHolder<QPDF> q;  
92 - PointerHolder<QPDFWriter> w; 91 + std::shared_ptr<QPDF> q;
  92 + std::shared_ptr<QPDFWriter> w;
93 93
94 q = getQpdf(); 94 q = getQpdf();
95 w = getWriter(q); 95 w = getWriter(q);
@@ -126,7 +126,7 @@ FuzzHelper::testPages() @@ -126,7 +126,7 @@ FuzzHelper::testPages()
126 { 126 {
127 // Parse all content streams, and exercise some helpers that 127 // Parse all content streams, and exercise some helpers that
128 // operate on pages. 128 // operate on pages.
129 - PointerHolder<QPDF> q = getQpdf(); 129 + std::shared_ptr<QPDF> q = getQpdf();
130 QPDFPageDocumentHelper pdh(*q); 130 QPDFPageDocumentHelper pdh(*q);
131 QPDFPageLabelDocumentHelper pldh(*q); 131 QPDFPageLabelDocumentHelper pldh(*q);
132 QPDFOutlineDocumentHelper odh(*q); 132 QPDFOutlineDocumentHelper odh(*q);
@@ -168,7 +168,7 @@ FuzzHelper::testPages() @@ -168,7 +168,7 @@ FuzzHelper::testPages()
168 void 168 void
169 FuzzHelper::testOutlines() 169 FuzzHelper::testOutlines()
170 { 170 {
171 - PointerHolder<QPDF> q = getQpdf(); 171 + std::shared_ptr<QPDF> q = getQpdf();
172 std::list<std::vector<QPDFOutlineObjectHelper>> queue; 172 std::list<std::vector<QPDFOutlineObjectHelper>> queue;
173 QPDFOutlineDocumentHelper odh(*q); 173 QPDFOutlineDocumentHelper odh(*q);
174 queue.push_back(odh.getTopLevelOutlines()); 174 queue.push_back(odh.getTopLevelOutlines());
fuzz/standalone_fuzz_target_runner.cc
@@ -8,7 +8,7 @@ int @@ -8,7 +8,7 @@ int
8 main(int argc, char** argv) 8 main(int argc, char** argv)
9 { 9 {
10 for (int i = 1; i < argc; i++) { 10 for (int i = 1; i < argc; i++) {
11 - PointerHolder<char> file_buf; 11 + std::shared_ptr<char> file_buf;
12 size_t size = 0; 12 size_t size = 0;
13 QUtil::read_file_into_memory(argv[i], file_buf, size); 13 QUtil::read_file_into_memory(argv[i], file_buf, size);
14 LLVMFuzzerTestOneInput( 14 LLVMFuzzerTestOneInput(
libtests/input_source.cc
@@ -5,11 +5,11 @@ @@ -5,11 +5,11 @@
5 #include <cstring> 5 #include <cstring>
6 #include <iostream> 6 #include <iostream>
7 7
8 -static PointerHolder<Buffer> 8 +static std::shared_ptr<Buffer>
9 get_buffer() 9 get_buffer()
10 { 10 {
11 size_t size = 3172; 11 size_t size = 3172;
12 - PointerHolder<Buffer> b(new Buffer(size)); 12 + std::shared_ptr<Buffer> b(new Buffer(size));
13 unsigned char* p = b->getBuffer(); 13 unsigned char* p = b->getBuffer();
14 for (size_t i = 0; i < size; ++i) { 14 for (size_t i = 0; i < size; ++i) {
15 p[i] = static_cast<unsigned char>(i & 0xff); 15 p[i] = static_cast<unsigned char>(i & 0xff);
@@ -20,7 +20,7 @@ get_buffer() @@ -20,7 +20,7 @@ get_buffer()
20 class Finder: public InputSource::Finder 20 class Finder: public InputSource::Finder
21 { 21 {
22 public: 22 public:
23 - Finder(PointerHolder<InputSource> is, std::string const& after) : 23 + Finder(std::shared_ptr<InputSource> is, std::string const& after) :
24 is(is), 24 is(is),
25 after(after) 25 after(after)
26 { 26 {
@@ -31,7 +31,7 @@ class Finder: public InputSource::Finder @@ -31,7 +31,7 @@ class Finder: public InputSource::Finder
31 virtual bool check(); 31 virtual bool check();
32 32
33 private: 33 private:
34 - PointerHolder<InputSource> is; 34 + std::shared_ptr<InputSource> is;
35 std::string after; 35 std::string after;
36 }; 36 };
37 37
@@ -57,14 +57,14 @@ check(char const* description, bool expected, bool actual) @@ -57,14 +57,14 @@ check(char const* description, bool expected, bool actual)
57 int 57 int
58 main() 58 main()
59 { 59 {
60 - PointerHolder<Buffer> b1 = get_buffer(); 60 + std::shared_ptr<Buffer> b1 = get_buffer();
61 unsigned char* b = b1->getBuffer(); 61 unsigned char* b = b1->getBuffer();
62 // Straddle block boundaries 62 // Straddle block boundaries
63 memcpy(b + 1022, "potato", 6); 63 memcpy(b + 1022, "potato", 6);
64 // Overlap so that the first check() would advance past the start 64 // Overlap so that the first check() would advance past the start
65 // of the next match 65 // of the next match
66 memcpy(b + 2037, "potato potato salad ", 20); 66 memcpy(b + 2037, "potato potato salad ", 20);
67 - auto is = PointerHolder<InputSource>( 67 + auto is = std::shared_ptr<InputSource>(
68 new BufferInputSource("test buffer input source", b1.get())); 68 new BufferInputSource("test buffer input source", b1.get()));
69 Finder f1(is, "salad"); 69 Finder f1(is, "salad");
70 check("find potato salad", true, is->findFirst("potato", 0, 0, f1)); 70 check("find potato salad", true, is->findFirst("potato", 0, 0, f1));
libtests/json_parse.cc
@@ -11,7 +11,7 @@ main(int argc, char* argv[]) @@ -11,7 +11,7 @@ main(int argc, char* argv[])
11 } 11 }
12 char const* filename = argv[1]; 12 char const* filename = argv[1];
13 try { 13 try {
14 - PointerHolder<char> buf; 14 + std::shared_ptr<char> buf;
15 size_t size; 15 size_t size;
16 QUtil::read_file_into_memory(filename, buf, size); 16 QUtil::read_file_into_memory(filename, buf, size);
17 std::string s(buf.get(), size); 17 std::string s(buf.get(), size);
libtests/qutil.cc
@@ -529,7 +529,7 @@ read_from_file_test() @@ -529,7 +529,7 @@ read_from_file_test()
529 fclose(fp); 529 fclose(fp);
530 } 530 }
531 531
532 - PointerHolder<char> buf; 532 + std::shared_ptr<char> buf;
533 size_t size = 0; 533 size_t size = 0;
534 QUtil::read_file_into_memory("other-file", buf, size); 534 QUtil::read_file_into_memory("other-file", buf, size);
535 std::cout << "read " << size << " bytes" << std::endl; 535 std::cout << "read " << size << " bytes" << std::endl;
@@ -595,7 +595,7 @@ assert_no_file(char const* filename) @@ -595,7 +595,7 @@ assert_no_file(char const* filename)
595 void 595 void
596 rename_delete_test() 596 rename_delete_test()
597 { 597 {
598 - PointerHolder<char> buf; 598 + std::shared_ptr<char> buf;
599 size_t size = 0; 599 size_t size = 0;
600 600
601 try { 601 try {
qpdf/test_driver.cc
@@ -49,7 +49,7 @@ usage() @@ -49,7 +49,7 @@ usage()
49 class Provider: public QPDFObjectHandle::StreamDataProvider 49 class Provider: public QPDFObjectHandle::StreamDataProvider
50 { 50 {
51 public: 51 public:
52 - Provider(PointerHolder<Buffer> b) : 52 + Provider(std::shared_ptr<Buffer> b) :
53 b(b), 53 b(b),
54 bad_length(false) 54 bad_length(false)
55 { 55 {
@@ -74,7 +74,7 @@ class Provider: public QPDFObjectHandle::StreamDataProvider @@ -74,7 +74,7 @@ class Provider: public QPDFObjectHandle::StreamDataProvider
74 } 74 }
75 75
76 private: 76 private:
77 - PointerHolder<Buffer> b; 77 + std::shared_ptr<Buffer> b;
78 bool bad_length; 78 bool bad_length;
79 }; 79 };
80 80
@@ -151,7 +151,7 @@ class TokenFilter: public QPDFObjectHandle::TokenFilter @@ -151,7 +151,7 @@ class TokenFilter: public QPDFObjectHandle::TokenFilter
151 static std::string 151 static std::string
152 getPageContents(QPDFObjectHandle page) 152 getPageContents(QPDFObjectHandle page)
153 { 153 {
154 - PointerHolder<Buffer> b1 = page.getKey("/Contents").getStreamData(); 154 + std::shared_ptr<Buffer> b1 = page.getKey("/Contents").getStreamData();
155 return std::string( 155 return std::string(
156 reinterpret_cast<char*>(b1->getBuffer()), b1->getSize()) + 156 reinterpret_cast<char*>(b1->getBuffer()), b1->getSize()) +
157 "\0"; 157 "\0";
@@ -271,14 +271,14 @@ test_0_1(QPDF&amp; pdf, char const* arg2) @@ -271,14 +271,14 @@ test_0_1(QPDF&amp; pdf, char const* arg2)
271 std::cout << "Raw stream data:" << std::endl; 271 std::cout << "Raw stream data:" << std::endl;
272 std::cout.flush(); 272 std::cout.flush();
273 QUtil::binary_stdout(); 273 QUtil::binary_stdout();
274 - auto out = make_pointer_holder<Pl_StdioFile>("raw", stdout); 274 + auto out = std::make_shared<Pl_StdioFile>("raw", stdout);
275 qtest.pipeStreamData(out.get(), 0, qpdf_dl_none); 275 qtest.pipeStreamData(out.get(), 0, qpdf_dl_none);
276 276
277 std::cout << std::endl << "Uncompressed stream data:" << std::endl; 277 std::cout << std::endl << "Uncompressed stream data:" << std::endl;
278 if (qtest.pipeStreamData(0, 0, qpdf_dl_all)) { 278 if (qtest.pipeStreamData(0, 0, qpdf_dl_all)) {
279 std::cout.flush(); 279 std::cout.flush();
280 QUtil::binary_stdout(); 280 QUtil::binary_stdout();
281 - out = make_pointer_holder<Pl_StdioFile>("filtered", stdout); 281 + out = std::make_shared<Pl_StdioFile>("filtered", stdout);
282 qtest.pipeStreamData(out.get(), 0, qpdf_dl_all); 282 qtest.pipeStreamData(out.get(), 0, qpdf_dl_all);
283 std::cout << std::endl << "End of stream data" << std::endl; 283 std::cout << std::endl << "End of stream data" << std::endl;
284 } else { 284 } else {
@@ -316,7 +316,7 @@ test_2(QPDF&amp; pdf, char const* arg2) @@ -316,7 +316,7 @@ test_2(QPDF&amp; pdf, char const* arg2)
316 QPDFObjectHandle page = kids.getArrayItem(1); // second page 316 QPDFObjectHandle page = kids.getArrayItem(1); // second page
317 QPDFObjectHandle contents = page.getKey("/Contents"); 317 QPDFObjectHandle contents = page.getKey("/Contents");
318 QUtil::binary_stdout(); 318 QUtil::binary_stdout();
319 - auto out = make_pointer_holder<Pl_StdioFile>("filtered", stdout); 319 + auto out = std::make_shared<Pl_StdioFile>("filtered", stdout);
320 contents.pipeStreamData(out.get(), 0, qpdf_dl_generalized); 320 contents.pipeStreamData(out.get(), 0, qpdf_dl_generalized);
321 } 321 }
322 322
@@ -329,8 +329,7 @@ test_3(QPDF&amp; pdf, char const* arg2) @@ -329,8 +329,7 @@ test_3(QPDF&amp; pdf, char const* arg2)
329 std::cout << "-- stream " << i << " --" << std::endl; 329 std::cout << "-- stream " << i << " --" << std::endl;
330 std::cout.flush(); 330 std::cout.flush();
331 QUtil::binary_stdout(); 331 QUtil::binary_stdout();
332 - auto out =  
333 - make_pointer_holder<Pl_StdioFile>("tokenized stream", stdout); 332 + auto out = std::make_shared<Pl_StdioFile>("tokenized stream", stdout);
334 stream.pipeStreamData( 333 stream.pipeStreamData(
335 out.get(), qpdf_ef_normalize, qpdf_dl_generalized); 334 out.get(), qpdf_ef_normalize, qpdf_dl_generalized);
336 } 335 }
@@ -503,7 +502,7 @@ test_8(QPDF&amp; pdf, char const* arg2) @@ -503,7 +502,7 @@ test_8(QPDF&amp; pdf, char const* arg2)
503 // This is a bogus way to use StreamDataProvider, but it does 502 // This is a bogus way to use StreamDataProvider, but it does
504 // adequately test its functionality. 503 // adequately test its functionality.
505 Provider* provider = new Provider(b); 504 Provider* provider = new Provider(b);
506 - auto p = PointerHolder<QPDFObjectHandle::StreamDataProvider>(provider); 505 + auto p = std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(provider);
507 qstream.replaceStreamData( 506 qstream.replaceStreamData(
508 p, 507 p,
509 QPDFObjectHandle::newName("/FlateDecode"), 508 QPDFObjectHandle::newName("/FlateDecode"),
@@ -532,7 +531,7 @@ test_9(QPDF&amp; pdf, char const* arg2) @@ -532,7 +531,7 @@ test_9(QPDF&amp; pdf, char const* arg2)
532 { 531 {
533 QPDFObjectHandle root = pdf.getRoot(); 532 QPDFObjectHandle root = pdf.getRoot();
534 // Explicitly exercise the Buffer version of newStream 533 // Explicitly exercise the Buffer version of newStream
535 - auto buf = make_pointer_holder<Buffer>(20U); 534 + auto buf = std::make_shared<Buffer>(20U);
536 unsigned char* bp = buf->getBuffer(); 535 unsigned char* bp = buf->getBuffer();
537 memcpy(bp, "data for new stream\n", 20); // no null! 536 memcpy(bp, "data for new stream\n", 20); // no null!
538 QPDFObjectHandle qstream = QPDFObjectHandle::newStream(&pdf, buf); 537 QPDFObjectHandle qstream = QPDFObjectHandle::newStream(&pdf, buf);
@@ -581,8 +580,8 @@ test_11(QPDF&amp; pdf, char const* arg2) @@ -581,8 +580,8 @@ test_11(QPDF&amp; pdf, char const* arg2)
581 { 580 {
582 QPDFObjectHandle root = pdf.getRoot(); 581 QPDFObjectHandle root = pdf.getRoot();
583 QPDFObjectHandle qstream = root.getKey("/QStream"); 582 QPDFObjectHandle qstream = root.getKey("/QStream");
584 - PointerHolder<Buffer> b1 = qstream.getStreamData();  
585 - PointerHolder<Buffer> b2 = qstream.getRawStreamData(); 583 + std::shared_ptr<Buffer> b1 = qstream.getStreamData();
  584 + std::shared_ptr<Buffer> b2 = qstream.getRawStreamData();
586 if ((b1->getSize() == 7) && (memcmp(b1->getBuffer(), "potato\n", 7) == 0)) { 585 if ((b1->getSize() == 7) && (memcmp(b1->getBuffer(), "potato\n", 7) == 0)) {
587 std::cout << "filtered stream data okay" << std::endl; 586 std::cout << "filtered stream data okay" << std::endl;
588 } 587 }
@@ -815,7 +814,7 @@ test_17(QPDF&amp; pdf, char const* arg2) @@ -815,7 +814,7 @@ test_17(QPDF&amp; pdf, char const* arg2)
815 QPDFObjectHandle(pages.at(1)).getKey("/Contents").getObjGen()); 814 QPDFObjectHandle(pages.at(1)).getKey("/Contents").getObjGen());
816 pdf.removePage(pages.at(0)); 815 pdf.removePage(pages.at(0));
817 assert(pages.size() == 2); 816 assert(pages.size() == 2);
818 - PointerHolder<Buffer> b = 817 + std::shared_ptr<Buffer> b =
819 QPDFObjectHandle(pages.at(0)).getKey("/Contents").getStreamData(); 818 QPDFObjectHandle(pages.at(0)).getKey("/Contents").getStreamData();
820 std::string contents = std::string( 819 std::string contents = std::string(
821 reinterpret_cast<char const*>(b->getBuffer()), b->getSize()); 820 reinterpret_cast<char const*>(b->getBuffer()), b->getSize());
@@ -1039,7 +1038,7 @@ test_27(QPDF&amp; pdf, char const* arg2) @@ -1039,7 +1038,7 @@ test_27(QPDF&amp; pdf, char const* arg2)
1039 // also exercise setImmediateCopyFrom. 1038 // also exercise setImmediateCopyFrom.
1040 1039
1041 // Create a provider. The provider stays in scope. 1040 // Create a provider. The provider stays in scope.
1042 - PointerHolder<QPDFObjectHandle::StreamDataProvider> p1; 1041 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> p1;
1043 { 1042 {
1044 // Local scope 1043 // Local scope
1045 Pl_Buffer pl("buffer"); 1044 Pl_Buffer pl("buffer");
@@ -1065,7 +1064,7 @@ test_27(QPDF&amp; pdf, char const* arg2) @@ -1065,7 +1064,7 @@ test_27(QPDF&amp; pdf, char const* arg2)
1065 // Make sure some source PDFs are out of scope when we 1064 // Make sure some source PDFs are out of scope when we
1066 // write. 1065 // write.
1067 1066
1068 - PointerHolder<QPDFObjectHandle::StreamDataProvider> p2; 1067 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> p2;
1069 // Create another provider. This one will go out of scope 1068 // Create another provider. This one will go out of scope
1070 // along with its containing qpdf, which has 1069 // along with its containing qpdf, which has
1071 // setImmediateCopyFrom(true). 1070 // setImmediateCopyFrom(true).
@@ -1266,7 +1265,7 @@ test_35(QPDF&amp; pdf, char const* arg2) @@ -1266,7 +1265,7 @@ test_35(QPDF&amp; pdf, char const* arg2)
1266 { 1265 {
1267 // Extract attachments 1266 // Extract attachments
1268 1267
1269 - std::map<std::string, PointerHolder<Buffer>> attachments; 1268 + std::map<std::string, std::shared_ptr<Buffer>> attachments;
1270 QPDFObjectHandle root = pdf.getRoot(); 1269 QPDFObjectHandle root = pdf.getRoot();
1271 QPDFObjectHandle names = root.getKey("/Names"); 1270 QPDFObjectHandle names = root.getKey("/Names");
1272 QPDFObjectHandle embeddedFiles = names.getKey("/EmbeddedFiles"); 1271 QPDFObjectHandle embeddedFiles = names.getKey("/EmbeddedFiles");
@@ -1282,7 +1281,7 @@ test_35(QPDF&amp; pdf, char const* arg2) @@ -1282,7 +1281,7 @@ test_35(QPDF&amp; pdf, char const* arg2)
1282 attachments[filename] = stream.getStreamData(); 1281 attachments[filename] = stream.getStreamData();
1283 } 1282 }
1284 } 1283 }
1285 - for (std::map<std::string, PointerHolder<Buffer>>::iterator iter = 1284 + for (std::map<std::string, std::shared_ptr<Buffer>>::iterator iter =
1286 attachments.begin(); 1285 attachments.begin();
1287 iter != attachments.end(); 1286 iter != attachments.end();
1288 ++iter) { 1287 ++iter) {
@@ -1421,7 +1420,7 @@ test_41(QPDF&amp; pdf, char const* arg2) @@ -1421,7 +1420,7 @@ test_41(QPDF&amp; pdf, char const* arg2)
1421 iter != pages.end(); 1420 iter != pages.end();
1422 ++iter) { 1421 ++iter) {
1423 (*iter).addContentTokenFilter( 1422 (*iter).addContentTokenFilter(
1424 - PointerHolder<QPDFObjectHandle::TokenFilter>(new TokenFilter())); 1423 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(new TokenFilter()));
1425 } 1424 }
1426 QPDFWriter w(pdf, "a.pdf"); 1425 QPDFWriter w(pdf, "a.pdf");
1427 w.setQDFMode(true); 1426 w.setQDFMode(true);
@@ -2468,12 +2467,12 @@ test_68(QPDF&amp; pdf, char const* arg2) @@ -2468,12 +2467,12 @@ test_68(QPDF&amp; pdf, char const* arg2)
2468 } catch (std::exception& e) { 2467 } catch (std::exception& e) {
2469 std::cout << "get unfilterable stream: " << e.what() << std::endl; 2468 std::cout << "get unfilterable stream: " << e.what() << std::endl;
2470 } 2469 }
2471 - PointerHolder<Buffer> b1 = qstream.getStreamData(qpdf_dl_all); 2470 + std::shared_ptr<Buffer> b1 = qstream.getStreamData(qpdf_dl_all);
2472 if ((b1->getSize() > 10) && 2471 if ((b1->getSize() > 10) &&
2473 (memcmp(b1->getBuffer(), "wwwwwwwww", 9) == 0)) { 2472 (memcmp(b1->getBuffer(), "wwwwwwwww", 9) == 0)) {
2474 std::cout << "filtered stream data okay" << std::endl; 2473 std::cout << "filtered stream data okay" << std::endl;
2475 } 2474 }
2476 - PointerHolder<Buffer> b2 = qstream.getRawStreamData(); 2475 + std::shared_ptr<Buffer> b2 = qstream.getRawStreamData();
2477 if ((b2->getSize() > 10) && 2476 if ((b2->getSize() > 10) &&
2478 (memcmp( 2477 (memcmp(
2479 b2->getBuffer(), "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46", 10) == 2478 b2->getBuffer(), "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46", 10) ==
@@ -2578,11 +2577,11 @@ test_72(QPDF&amp; pdf, char const* arg2) @@ -2578,11 +2577,11 @@ test_72(QPDF&amp; pdf, char const* arg2)
2578 Pl_Buffer b("buffer"); 2577 Pl_Buffer b("buffer");
2579 if (i == 0) { 2578 if (i == 0) {
2580 fx1.addContentTokenFilter( 2579 fx1.addContentTokenFilter(
2581 - PointerHolder<QPDFObjectHandle::TokenFilter>( 2580 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(
2582 new TokenFilter())); 2581 new TokenFilter()));
2583 } else { 2582 } else {
2584 fx1.getObjectHandle().addTokenFilter( 2583 fx1.getObjectHandle().addTokenFilter(
2585 - PointerHolder<QPDFObjectHandle::TokenFilter>( 2584 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(
2586 new TokenFilter())); 2585 new TokenFilter()));
2587 } 2586 }
2588 fx1.pipeContents(&b); 2587 fx1.pipeContents(&b);
@@ -2999,7 +2998,7 @@ test_83(QPDF&amp; pdf, char const* arg2) @@ -2999,7 +2998,7 @@ test_83(QPDF&amp; pdf, char const* arg2)
2999 // partial = true, we just use qpdf --job-json-file. 2998 // partial = true, we just use qpdf --job-json-file.
3000 2999
3001 QPDFJob j; 3000 QPDFJob j;
3002 - PointerHolder<char> file_buf; 3001 + std::shared_ptr<char> file_buf;
3003 size_t size; 3002 size_t size;
3004 QUtil::read_file_into_memory(arg2, file_buf, size); 3003 QUtil::read_file_into_memory(arg2, file_buf, size);
3005 try { 3004 try {
@@ -3201,7 +3200,7 @@ runtest(int n, char const* filename1, char const* arg2) @@ -3201,7 +3200,7 @@ runtest(int n, char const* filename1, char const* arg2)
3201 } 3200 }
3202 3201
3203 QPDF pdf; 3202 QPDF pdf;
3204 - PointerHolder<char> file_buf; 3203 + std::shared_ptr<char> file_buf;
3205 FILE* filep = 0; 3204 FILE* filep = 0;
3206 if (n == 0) { 3205 if (n == 0) {
3207 pdf.setAttemptRecovery(false); 3206 pdf.setAttemptRecovery(false);
qpdf/test_large_file.cc
@@ -231,7 +231,7 @@ create_pdf(char const* filename) @@ -231,7 +231,7 @@ create_pdf(char const* filename)
231 image_dict.replaceKey("/Width", newInteger(width)); 231 image_dict.replaceKey("/Width", newInteger(width));
232 image_dict.replaceKey("/Height", newInteger(height)); 232 image_dict.replaceKey("/Height", newInteger(height));
233 ImageProvider* p = new ImageProvider(pageno); 233 ImageProvider* p = new ImageProvider(pageno);
234 - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider(p); 234 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider(p);
235 image.replaceStreamData( 235 image.replaceStreamData(
236 provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull()); 236 provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
237 237
@@ -265,7 +265,7 @@ create_pdf(char const* filename) @@ -265,7 +265,7 @@ create_pdf(char const* filename)
265 static void 265 static void
266 check_page_contents(size_t pageno, QPDFObjectHandle page) 266 check_page_contents(size_t pageno, QPDFObjectHandle page)
267 { 267 {
268 - PointerHolder<Buffer> buf = page.getKey("/Contents").getStreamData(); 268 + std::shared_ptr<Buffer> buf = page.getKey("/Contents").getStreamData();
269 std::string actual_contents = 269 std::string actual_contents =
270 std::string(reinterpret_cast<char*>(buf->getBuffer()), buf->getSize()); 270 std::string(reinterpret_cast<char*>(buf->getBuffer()), buf->getSize());
271 std::string expected_contents = generate_page_contents(pageno); 271 std::string expected_contents = generate_page_contents(pageno);
qpdf/test_tokenizer.cc
@@ -25,7 +25,7 @@ usage() @@ -25,7 +25,7 @@ usage()
25 class Finder: public InputSource::Finder 25 class Finder: public InputSource::Finder
26 { 26 {
27 public: 27 public:
28 - Finder(PointerHolder<InputSource> is, std::string const& str) : 28 + Finder(std::shared_ptr<InputSource> is, std::string const& str) :
29 is(is), 29 is(is),
30 str(str) 30 str(str)
31 { 31 {
@@ -36,7 +36,7 @@ class Finder: public InputSource::Finder @@ -36,7 +36,7 @@ class Finder: public InputSource::Finder
36 virtual bool check(); 36 virtual bool check();
37 37
38 private: 38 private:
39 - PointerHolder<InputSource> is; 39 + std::shared_ptr<InputSource> is;
40 std::string str; 40 std::string str;
41 }; 41 };
42 42
@@ -117,7 +117,7 @@ sanitize(std::string const&amp; value) @@ -117,7 +117,7 @@ sanitize(std::string const&amp; value)
117 static void 117 static void
118 try_skipping( 118 try_skipping(
119 QPDFTokenizer& tokenizer, 119 QPDFTokenizer& tokenizer,
120 - PointerHolder<InputSource> is, 120 + std::shared_ptr<InputSource> is,
121 size_t max_len, 121 size_t max_len,
122 char const* what, 122 char const* what,
123 Finder& f) 123 Finder& f)
@@ -132,7 +132,7 @@ try_skipping( @@ -132,7 +132,7 @@ try_skipping(
132 132
133 static void 133 static void
134 dump_tokens( 134 dump_tokens(
135 - PointerHolder<InputSource> is, 135 + std::shared_ptr<InputSource> is,
136 std::string const& label, 136 std::string const& label,
137 size_t max_len, 137 size_t max_len,
138 bool include_ignorable, 138 bool include_ignorable,
@@ -191,12 +191,12 @@ dump_tokens( @@ -191,12 +191,12 @@ dump_tokens(
191 static void 191 static void
192 process(char const* filename, bool include_ignorable, size_t max_len) 192 process(char const* filename, bool include_ignorable, size_t max_len)
193 { 193 {
194 - PointerHolder<InputSource> is; 194 + std::shared_ptr<InputSource> is;
195 195
196 // Tokenize file, skipping streams 196 // Tokenize file, skipping streams
197 FileInputSource* fis = new FileInputSource(); 197 FileInputSource* fis = new FileInputSource();
198 fis->setFilename(filename); 198 fis->setFilename(filename);
199 - is = PointerHolder<InputSource>(fis); 199 + is = std::shared_ptr<InputSource>(fis);
200 dump_tokens(is, "FILE", max_len, include_ignorable, true, false); 200 dump_tokens(is, "FILE", max_len, include_ignorable, true, false);
201 201
202 // Tokenize content streams, skipping inline images 202 // Tokenize content streams, skipping inline images
@@ -214,7 +214,7 @@ process(char const* filename, bool include_ignorable, size_t max_len) @@ -214,7 +214,7 @@ process(char const* filename, bool include_ignorable, size_t max_len)
214 auto content_data = plb.getBufferSharedPointer(); 214 auto content_data = plb.getBufferSharedPointer();
215 BufferInputSource* bis = 215 BufferInputSource* bis =
216 new BufferInputSource("content data", content_data.get()); 216 new BufferInputSource("content data", content_data.get());
217 - is = PointerHolder<InputSource>(bis); 217 + is = std::shared_ptr<InputSource>(bis);
218 dump_tokens( 218 dump_tokens(
219 is, 219 is,
220 "PAGE " + QUtil::int_to_string(pageno), 220 "PAGE " + QUtil::int_to_string(pageno),
@@ -231,11 +231,11 @@ process(char const* filename, bool include_ignorable, size_t max_len) @@ -231,11 +231,11 @@ process(char const* filename, bool include_ignorable, size_t max_len)
231 ++iter) { 231 ++iter) {
232 if ((*iter).isStream() && (*iter).getDict().getKey("/Type").isName() && 232 if ((*iter).isStream() && (*iter).getDict().getKey("/Type").isName() &&
233 (*iter).getDict().getKey("/Type").getName() == "/ObjStm") { 233 (*iter).getDict().getKey("/Type").getName() == "/ObjStm") {
234 - PointerHolder<Buffer> b = 234 + std::shared_ptr<Buffer> b =
235 (*iter).getStreamData(qpdf_dl_specialized); 235 (*iter).getStreamData(qpdf_dl_specialized);
236 BufferInputSource* bis = 236 BufferInputSource* bis =
237 new BufferInputSource("object stream data", b.get()); 237 new BufferInputSource("object stream data", b.get());
238 - is = PointerHolder<InputSource>(bis); 238 + is = std::shared_ptr<InputSource>(bis);
239 dump_tokens( 239 dump_tokens(
240 is, 240 is,
241 "OBJECT STREAM " + QUtil::int_to_string((*iter).getObjectID()), 241 "OBJECT STREAM " + QUtil::int_to_string((*iter).getObjectID()),
zlib-flate/zlib-flate.cc
@@ -59,8 +59,8 @@ main(int argc, char* argv[]) @@ -59,8 +59,8 @@ main(int argc, char* argv[])
59 59
60 QUtil::binary_stdout(); 60 QUtil::binary_stdout();
61 QUtil::binary_stdin(); 61 QUtil::binary_stdin();
62 - auto out = make_pointer_holder<Pl_StdioFile>("stdout", stdout);  
63 - auto flate = make_pointer_holder<Pl_Flate>("flate", out.get(), action); 62 + auto out = std::make_shared<Pl_StdioFile>("stdout", stdout);
  63 + auto flate = std::make_shared<Pl_Flate>("flate", out.get(), action);
64 bool warn = false; 64 bool warn = false;
65 flate->setWarnCallback([&warn](char const* msg, int code) { 65 flate->setWarnCallback([&warn](char const* msg, int code) {
66 warn = true; 66 warn = true;