From 0f2ef5e85bce0d64683e8071151711f21fa3e052 Mon Sep 17 00:00:00 2001 From: m-holger Date: Thu, 25 May 2023 14:10:47 +0100 Subject: Add new Buffer method copy and deprecate copy constructor / assignment operator Also fix accidental Buffer copy in Pl_LZWDecoder::addToTable. --- libqpdf/Buffer.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'libqpdf/Buffer.cc') diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc index ae04fbc8..3dddd5db 100644 --- a/libqpdf/Buffer.cc +++ b/libqpdf/Buffer.cc @@ -1,7 +1,20 @@ +#include + #include #include +bool test_mode = false; + +// During CI the Buffer copy constructor and copy assignment operator throw an assertion error to +// detect their accidental use. Call setTestMode to surpress the assertion errors for testing of +// copy construction and assignment. +void +Buffer::setTestMode() noexcept +{ + test_mode = true; +} + Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) : own_memory(own_memory), size(size), @@ -38,12 +51,14 @@ Buffer::Buffer(unsigned char* buf, size_t size) : Buffer::Buffer(Buffer const& rhs) { + assert(test_mode); copy(rhs); } Buffer& Buffer::operator=(Buffer const& rhs) { + assert(test_mode); copy(rhs); return *this; } @@ -88,3 +103,13 @@ Buffer::getBuffer() { return m->buf; } + +Buffer +Buffer::copy() const +{ + auto result = Buffer(m->size); + if (m->size) { + memcpy(result.m->buf, m->buf, m->size); + } + return result; +} -- cgit v1.2.3-54-g00ecf