mirror of
https://github.com/minetest/minetest.git
synced 2025-03-06 20:48:40 +01:00
Fix buggy memcpy call in a template (#15672)
This commit is contained in:
parent
2bfcd45b35
commit
7053348e31
1 changed files with 34 additions and 45 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue