summaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf-c.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-06-22 20:24:49 +0200
committerJay Berkenbilt <ejb@ql.org>2019-06-22 22:57:52 +0200
commit6c39aa87638f7a6f96a97627ac112fb2022bd3a7 (patch)
tree6941498e1cacbd6dcade4a695b27085fa693984f /libqpdf/qpdf-c.cc
parent12400475283f5081ea55f52a764e43f14032f6ba (diff)
downloadqpdf-6c39aa87638f7a6f96a97627ac112fb2022bd3a7.tar.zst
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.
Diffstat (limited to 'libqpdf/qpdf-c.cc')
-rw-r--r--libqpdf/qpdf-c.cc24
1 files changed, 8 insertions, 16 deletions
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> qpdf;
+ PointerHolder<QPDFWriter> qpdf_writer;
PointerHolder<QPDFExc> 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<Buffer> 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();
}