Fix buggy memcpy call in a template (#15672)

This commit is contained in:
cosin15 2025-01-14 20:26:29 +01:00 committed by GitHub
parent 2bfcd45b35
commit 7053348e31
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -36,10 +36,11 @@ public:
Buffer(unsigned int size)
{
m_size = size;
if(size != 0)
if (size != 0) {
data = new T[size];
else
} else {
data = nullptr;
}
}
// Disable class copy
@ -49,26 +50,24 @@ public:
Buffer(Buffer &&buffer)
{
m_size = buffer.m_size;
if(m_size != 0)
{
if (m_size != 0) {
data = buffer.data;
buffer.data = nullptr;
buffer.m_size = 0;
}
else
} else {
data = nullptr;
}
}
// Copies whole buffer
Buffer(const T *t, unsigned int size)
{
m_size = size;
if(size != 0)
{
if (size != 0) {
data = new T[size];
memcpy(data, t, size);
}
else
memcpy(data, t, sizeof(T) * size);
} else {
data = nullptr;
}
}
~Buffer()
@ -78,18 +77,18 @@ public:
Buffer& operator=(Buffer &&buffer)
{
if(this == &buffer)
if (this == &buffer) {
return *this;
}
drop();
m_size = buffer.m_size;
if(m_size != 0)
{
if (m_size != 0) {
data = buffer.data;
buffer.data = nullptr;
buffer.m_size = 0;
}
else
} else {
data = nullptr;
}
return *this;
}
@ -99,7 +98,7 @@ public:
buffer.m_size = m_size;
if (m_size != 0) {
buffer.data = new T[m_size];
memcpy(buffer.data, data, m_size);
memcpy(buffer.data, data, sizeof(T) * m_size);
} else {
buffer.data = nullptr;
}
@ -121,8 +120,9 @@ public:
operator std::string_view() const
{
if (!data)
if (!data) {
return std::string_view();
}
return std::string_view(reinterpret_cast<char*>(data), m_size);
}
@ -156,12 +156,14 @@ public:
SharedBuffer(unsigned int size)
{
m_size = size;
if(m_size != 0)
if (m_size != 0) {
data = new T[m_size];
else
} else {
data = nullptr;
}
refcount = new unsigned int;
memset(data,0,sizeof(T)*m_size);
memset(data, 0, sizeof(T) * m_size);
(*refcount) = 1;
}
SharedBuffer(const SharedBuffer &buffer)
@ -173,8 +175,10 @@ public:
}
SharedBuffer & operator=(const SharedBuffer & buffer)
{
if(this == &buffer)
if (this == &buffer) {
return *this;
}
drop();
m_size = buffer.m_size;
data = buffer.data;
@ -182,36 +186,22 @@ public:
(*refcount)++;
return *this;
}
/*
Copies whole buffer
*/
//! Copies whole buffer
SharedBuffer(const T *t, unsigned int size)
{
m_size = size;
if(m_size != 0)
{
if (m_size != 0) {
data = new T[m_size];
memcpy(data, t, m_size);
}
else
memcpy(data, t, sizeof(T) * m_size);
} else {
data = nullptr;
}
refcount = new unsigned int;
(*refcount) = 1;
}
/*
Copies whole buffer
*/
SharedBuffer(const Buffer<T> &buffer)
//! Copies whole buffer
SharedBuffer(const Buffer<T> &buffer) : SharedBuffer(*buffer, buffer.getSize())
{
m_size = buffer.getSize();
if (m_size != 0) {
data = new T[m_size];
memcpy(data, *buffer, buffer.getSize());
}
else
data = nullptr;
refcount = new unsigned int;
(*refcount) = 1;
}
~SharedBuffer()
{
@ -239,8 +229,7 @@ private:
{
assert((*refcount) > 0);
(*refcount)--;
if(*refcount == 0)
{
if (*refcount == 0) {
delete[] data;
delete refcount;
}