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();
}
const char * pyVaultNode::GetCreateAgeName()
plString pyVaultNode::GetCreateAgeName() const
{
if (fNode)
return fNode->GetCreateAgeName().c_str();
return fNode->GetCreateAgeName();
return "";
}

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

@ -137,7 +137,7 @@ public:
PyObject* GetCreatorNode( void ); // returns pyVaultPlayerInfoNode
uint32_t GetCreateTime( void );
uint32_t GetCreateAgeTime( void );
const char * GetCreateAgeName( void );
plString GetCreateAgeName() const;
plUUID GetCreateAgeGuid(void) const;
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)
{
return PyString_FromString(self->fThis->GetCreateAgeName());
return PyString_FromPlString(self->fThis->GetCreateAgeName());
}
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)
{
@ -478,13 +495,13 @@ template<>
static void IRead<plString>(const uint8_t*& buf, plString& dest)
{
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);
plStringBuffer<uint16_t> str;
uint16_t* theStrBuffer = str.CreateWritableBuffer(arraySize - 1);
uint16_t* theStrBuffer = str.CreateWritableBuffer(nChars);
memcpy(theStrBuffer, buf, size);
theStrBuffer[arraySize - 1] = 0;
theStrBuffer[nChars] = 0;
dest = plString::FromUtf16(str);
buf += size;
}
@ -546,14 +563,14 @@ void NetVaultNode::Read(const uint8_t* buf, size_t size)
//============================================================================
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));
memcpy(ptr, &value, sizeof(T));
}
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();
uint32_t strsz = (utf16.GetSize() + 1) * 2;
@ -564,7 +581,7 @@ static void IWrite<plString>(ARRAY(uint8_t)* buffer, plString value)
}
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));

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

@ -210,6 +210,8 @@ public:
uint8_t* buffer;
Blob() : size(0), buffer(nullptr) { }
Blob(const Blob &rhs);
Blob(Blob &&rhs);
~Blob() { delete[] buffer; }
void operator =(const Blob& rhs);

Loading…
Cancel
Save