From 6c39aa87638f7a6f96a97627ac112fb2022bd3a7 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 22 Jun 2019 14:24:49 -0400 Subject: In shippable code, favor smart pointers (fixes #235) Use PointerHolder in several places where manually memory allocation and deallocation were being used. This helps to protect against memory leaks when exceptions are thrown in surprising places. --- libqpdf/qpdf-c.cc | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'libqpdf/qpdf-c.cc') diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc index f42b0e16..fa9045ea 100644 --- a/libqpdf/qpdf-c.cc +++ b/libqpdf/qpdf-c.cc @@ -22,8 +22,8 @@ struct _qpdf_data _qpdf_data(); ~_qpdf_data(); - QPDF* qpdf; - QPDFWriter* qpdf_writer; + PointerHolder qpdf; + PointerHolder qpdf_writer; PointerHolder error; _qpdf_error tmp_error; @@ -36,22 +36,16 @@ struct _qpdf_data unsigned long long size; char const* password; bool write_memory; - Buffer* output_buffer; + PointerHolder output_buffer; }; _qpdf_data::_qpdf_data() : - qpdf(0), - qpdf_writer(0), - write_memory(false), - output_buffer(0) + write_memory(false) { } _qpdf_data::~_qpdf_data() { - delete qpdf_writer; - delete qpdf; - delete output_buffer; } // must set qpdf->filename and qpdf->password @@ -451,14 +445,12 @@ QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf) static void qpdf_init_write_internal(qpdf_data qpdf) { - if (qpdf->qpdf_writer) + if (qpdf->qpdf_writer.getPointer()) { QTC::TC("qpdf", "qpdf-c called qpdf_init_write multiple times"); - delete qpdf->qpdf_writer; qpdf->qpdf_writer = 0; - if (qpdf->output_buffer) + if (qpdf->output_buffer.getPointer()) { - delete qpdf->output_buffer; qpdf->output_buffer = 0; qpdf->write_memory = false; qpdf->filename = 0; @@ -496,7 +488,7 @@ size_t qpdf_get_buffer_length(qpdf_data qpdf) { qpdf_get_buffer_internal(qpdf); size_t result = 0; - if (qpdf->output_buffer) + if (qpdf->output_buffer.getPointer()) { result = qpdf->output_buffer->getSize(); } @@ -507,7 +499,7 @@ unsigned char const* qpdf_get_buffer(qpdf_data qpdf) { unsigned char const* result = 0; qpdf_get_buffer_internal(qpdf); - if (qpdf->output_buffer) + if (qpdf->output_buffer.getPointer()) { result = qpdf->output_buffer->getBuffer(); } -- cgit v1.2.3-70-g09d2