Browse Source

Merge pull request #467 from zrax/vblobfix

Fix for SDL blob corruption
Adam Johnson 10 years ago
parent
commit
be607f9ad8
  1. 4
      Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp
  2. 2
      Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h
  3. 2
      Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp
  4. 29
      Sources/Plasma/NucleusLib/pnNetProtocol/Private/pnNpCommon.cpp
  5. 2
      Sources/Plasma/NucleusLib/pnNetProtocol/Private/pnNpCommon.h

4
Sources/Plasma/FeatureLib/pfPython/pyVaultNode.cpp

@ -285,10 +285,10 @@ uint32_t pyVaultNode::GetCreateAgeTime( void )
return GetCreateTime(); return GetCreateTime();
} }
const char * pyVaultNode::GetCreateAgeName() plString pyVaultNode::GetCreateAgeName() const
{ {
if (fNode) if (fNode)
return fNode->GetCreateAgeName().c_str(); return fNode->GetCreateAgeName();
return ""; return "";
} }

2
Sources/Plasma/FeatureLib/pfPython/pyVaultNode.h

@ -137,7 +137,7 @@ public:
PyObject* GetCreatorNode( void ); // returns pyVaultPlayerInfoNode PyObject* GetCreatorNode( void ); // returns pyVaultPlayerInfoNode
uint32_t GetCreateTime( void ); uint32_t GetCreateTime( void );
uint32_t GetCreateAgeTime( void ); uint32_t GetCreateAgeTime( void );
const char * GetCreateAgeName( void ); plString GetCreateAgeName() const;
plUUID GetCreateAgeGuid(void) const; plUUID GetCreateAgeGuid(void) const;
PyObject* GetCreateAgeCoords (); PyObject* GetCreateAgeCoords ();

2
Sources/Plasma/FeatureLib/pfPython/pyVaultNodeGlue.cpp

@ -149,7 +149,7 @@ PYTHON_METHOD_DEFINITION_NOARGS(ptVaultNode, getCreateAgeTime)
PYTHON_METHOD_DEFINITION_NOARGS(ptVaultNode, getCreateAgeName) PYTHON_METHOD_DEFINITION_NOARGS(ptVaultNode, getCreateAgeName)
{ {
return PyString_FromString(self->fThis->GetCreateAgeName()); return PyString_FromPlString(self->fThis->GetCreateAgeName());
} }
PYTHON_METHOD_DEFINITION_NOARGS(ptVaultNode, getCreateAgeGuid) PYTHON_METHOD_DEFINITION_NOARGS(ptVaultNode, getCreateAgeGuid)

29
Sources/Plasma/NucleusLib/pnNetProtocol/Private/pnNpCommon.cpp

@ -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));

2
Sources/Plasma/NucleusLib/pnNetProtocol/Private/pnNpCommon.h

@ -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);

Loading…
Cancel
Save