From 4d96ef4d9d2c35243a25d90949d43d0997e3bb44 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Thu, 14 Dec 2023 04:16:25 -0500 Subject: Make sure IoBuffer is a valid null-buffer after move operation (#610) --- src/zenbase/include/zenbase/refcount.h | 2 ++ src/zencore/include/zencore/iobuffer.h | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/zenbase/include/zenbase/refcount.h b/src/zenbase/include/zenbase/refcount.h index 3afcf467c..6ad49cba2 100644 --- a/src/zenbase/include/zenbase/refcount.h +++ b/src/zenbase/include/zenbase/refcount.h @@ -107,6 +107,8 @@ public: Rhs.m_Ref = nullptr; } + inline void Swap(RefPtr& Rhs) noexcept { std::swap(m_Ref, Rhs.m_Ref); } + private: T* m_Ref = nullptr; template diff --git a/src/zencore/include/zencore/iobuffer.h b/src/zencore/include/zencore/iobuffer.h index d891ed55b..b9e503354 100644 --- a/src/zencore/include/zencore/iobuffer.h +++ b/src/zencore/include/zencore/iobuffer.h @@ -337,11 +337,20 @@ public: BorrowedFile }; - inline IoBuffer() = default; - inline IoBuffer(IoBuffer&& Rhs) noexcept = default; - inline IoBuffer(const IoBuffer& Rhs) = default; + inline IoBuffer() = default; + inline IoBuffer(IoBuffer&& Rhs) noexcept + { + m_Core.Swap(Rhs.m_Core); + Rhs.m_Core = NullBufferCore; + } + inline IoBuffer(const IoBuffer& Rhs) = default; inline IoBuffer& operator=(const IoBuffer& Rhs) = default; - inline IoBuffer& operator=(IoBuffer&& Rhs) noexcept = default; + inline IoBuffer& operator =(IoBuffer&& Rhs) noexcept + { + m_Core.Swap(Rhs.m_Core); + Rhs.m_Core = NullBufferCore; + return *this; + } /** Create an uninitialized buffer of the given size */ -- cgit v1.2.3