From 30bc392ae4a2eb88879ed26059cbe702a3f4b134 Mon Sep 17 00:00:00 2001 From: m-holger Date: Sun, 28 Sep 2025 19:12:26 +0100 Subject: [PATCH] Refactor `Buffer::Members`: remove `own_memory`, simplify constructor logic, and replace manual memory management with `std::string`. --- libqpdf/Buffer.cc | 61 +++++++++++++++++++++---------------------------------------- 1 file changed, 21 insertions(+), 40 deletions(-) diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc index 1975d40..3e9c600 100644 --- a/libqpdf/Buffer.cc +++ b/libqpdf/Buffer.cc @@ -9,53 +9,35 @@ class Buffer::Members friend class Buffer; public: - Members(size_t size, unsigned char* buf, bool own_memory); - Members(std::string&& content); + Members() = default; + // Constructor for Buffers that don't own the memory. + Members(size_t size, unsigned char* buf) : + size(size), + buf(buf) + { + } + Members(std::string&& content) : + str(std::move(content)), + size(str.size()), + buf(reinterpret_cast(str.data())) + { + } Members(Members const&) = delete; - ~Members(); + ~Members() = default; private: - std::string str; - bool own_memory; size_t size; unsigned char* buf; }; -Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) : - own_memory(own_memory), - size(size), - buf(nullptr) -{ - if (own_memory) { - this->buf = (size ? new unsigned char[size] : nullptr); - } else { - this->buf = buf; - } -} - -Buffer::Members::Members(std::string&& content) : - str(std::move(content)), - own_memory(false), - size(str.size()), - buf(reinterpret_cast(str.data())) -{ -} - -Buffer::Members::~Members() -{ - if (this->own_memory) { - delete[] this->buf; - } -} - Buffer::Buffer() : - m(std::make_unique(0, nullptr, true)) + m(std::make_unique()) { } Buffer::Buffer(size_t size) : - m(std::make_unique(size, nullptr, true)) + m(std::make_unique(std::string(size, '\0'))) { } @@ -65,12 +47,12 @@ Buffer::Buffer(std::string&& content) : } Buffer::Buffer(unsigned char* buf, size_t size) : - m(std::make_unique(size, buf, false)) + m(std::make_unique(size, buf)) { } Buffer::Buffer(std::string& content) : - m(std::make_unique(content.size(), reinterpret_cast(content.data()), false)) + m(std::make_unique(content.size(), reinterpret_cast(content.data()))) { } @@ -109,9 +91,8 @@ Buffer::getBuffer() Buffer Buffer::copy() const { - auto result = Buffer(m->size); - if (m->size) { - memcpy(result.m->buf, m->buf, m->size); + if (m->size == 0) { + return {}; } - return result; + return {std::string(reinterpret_cast(m->buf), m->size)}; } -- libgit2 0.21.4