mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-18 11:19:10 +00:00
Fix for SDL blob corruption
This commit is contained in:
@ -293,6 +293,23 @@ void NetGameRank::CopyFrom(const NetGameRank & fromRank) {
|
|||||||
*
|
*
|
||||||
***/
|
***/
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
NetVaultNode::Blob::Blob(const Blob& rhs)
|
||||||
|
{
|
||||||
|
buffer = new uint8_t[rhs.size];
|
||||||
|
size = rhs.size;
|
||||||
|
memcpy(buffer, rhs.buffer, rhs.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
NetVaultNode::Blob::Blob(Blob&& rhs)
|
||||||
|
{
|
||||||
|
size = rhs.size;
|
||||||
|
buffer = rhs.buffer;
|
||||||
|
rhs.size = 0;
|
||||||
|
rhs.buffer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void NetVaultNode::Blob::operator=(const Blob& rhs)
|
void NetVaultNode::Blob::operator=(const Blob& rhs)
|
||||||
{
|
{
|
||||||
@ -478,13 +495,13 @@ template<>
|
|||||||
static void IRead<plString>(const uint8_t*& buf, plString& dest)
|
static void IRead<plString>(const uint8_t*& buf, plString& dest)
|
||||||
{
|
{
|
||||||
uint32_t size = *(reinterpret_cast<const uint32_t*>(buf));
|
uint32_t size = *(reinterpret_cast<const uint32_t*>(buf));
|
||||||
uint32_t arraySize = size / 2;
|
uint32_t nChars = (size / sizeof(uint16_t)) - 1;
|
||||||
buf += sizeof(uint32_t);
|
buf += sizeof(uint32_t);
|
||||||
|
|
||||||
plStringBuffer<uint16_t> str;
|
plStringBuffer<uint16_t> str;
|
||||||
uint16_t* theStrBuffer = str.CreateWritableBuffer(arraySize - 1);
|
uint16_t* theStrBuffer = str.CreateWritableBuffer(nChars);
|
||||||
memcpy(theStrBuffer, buf, size);
|
memcpy(theStrBuffer, buf, size);
|
||||||
theStrBuffer[arraySize - 1] = 0;
|
theStrBuffer[nChars] = 0;
|
||||||
dest = plString::FromUtf16(str);
|
dest = plString::FromUtf16(str);
|
||||||
buf += size;
|
buf += size;
|
||||||
}
|
}
|
||||||
@ -546,14 +563,14 @@ void NetVaultNode::Read(const uint8_t* buf, size_t size)
|
|||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void IWrite(ARRAY(uint8_t)* buffer, T value)
|
static void IWrite(ARRAY(uint8_t)* buffer, const T& value)
|
||||||
{
|
{
|
||||||
uint8_t* ptr = buffer->New(sizeof(T));
|
uint8_t* ptr = buffer->New(sizeof(T));
|
||||||
memcpy(ptr, &value, sizeof(T));
|
memcpy(ptr, &value, sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
static void IWrite<plString>(ARRAY(uint8_t)* buffer, plString value)
|
static void IWrite<plString>(ARRAY(uint8_t)* buffer, const plString& value)
|
||||||
{
|
{
|
||||||
plStringBuffer<uint16_t> utf16 = value.ToUtf16();
|
plStringBuffer<uint16_t> utf16 = value.ToUtf16();
|
||||||
uint32_t strsz = (utf16.GetSize() + 1) * 2;
|
uint32_t strsz = (utf16.GetSize() + 1) * 2;
|
||||||
@ -564,7 +581,7 @@ static void IWrite<plString>(ARRAY(uint8_t)* buffer, plString value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
static void IWrite<const NetVaultNode::Blob&>(ARRAY(uint8_t)* buffer, const NetVaultNode::Blob& blob)
|
static void IWrite<NetVaultNode::Blob>(ARRAY(uint8_t)* buffer, const NetVaultNode::Blob& blob)
|
||||||
{
|
{
|
||||||
IWrite(buffer, static_cast<uint32_t>(blob.size));
|
IWrite(buffer, static_cast<uint32_t>(blob.size));
|
||||||
|
|
||||||
|
@ -210,6 +210,8 @@ public:
|
|||||||
uint8_t* buffer;
|
uint8_t* buffer;
|
||||||
|
|
||||||
Blob() : size(0), buffer(nullptr) { }
|
Blob() : size(0), buffer(nullptr) { }
|
||||||
|
Blob(const Blob &rhs);
|
||||||
|
Blob(Blob &&rhs);
|
||||||
~Blob() { delete[] buffer; }
|
~Blob() { delete[] buffer; }
|
||||||
|
|
||||||
void operator =(const Blob& rhs);
|
void operator =(const Blob& rhs);
|
||||||
|
Reference in New Issue
Block a user