2
3
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-14 10:37:41 -04:00

Fix vault node data leak when field content flags are set but not flagged

This commit is contained in:
2013-01-04 18:04:01 -08:00
parent d080626c63
commit 5f4f9b9f5f
2 changed files with 15 additions and 24 deletions

View File

@ -90,7 +90,7 @@ static inline void IReadArray (T ** buf, unsigned * elems, uint8_t ** buffer, un
ASSERT(bytes % sizeof(T) == 0);
*elems = bytes / sizeof(T);
T * src = (T *)*buffer;
delete *buf;
free(*buf);
*buf = (T *)malloc(bytes);
memcpy(*buf, src, bytes);
*buffer += bytes;
@ -338,28 +338,19 @@ void NetGameRank::CopyFrom(const NetGameRank & fromRank) {
//============================================================================
static void DeallocNodeFields (NetVaultNode * node) {
for (uint64_t fieldFlag = 1; fieldFlag; fieldFlag <<= 1) {
if (fieldFlag > node->fieldFlags)
break;
#define DELFIELD(f, v) case (uint64_t)(NetVaultNode::f): delete node->v; node->v = nil; break
switch (fieldFlag & node->fieldFlags) {
DELFIELD(kCreateAgeName, createAgeName);
DELFIELD(kString64_1, string64_1);
DELFIELD(kString64_2, string64_2);
DELFIELD(kString64_3, string64_3);
DELFIELD(kString64_4, string64_4);
DELFIELD(kString64_5, string64_5);
DELFIELD(kString64_6, string64_6);
DELFIELD(kIString64_1, istring64_1);
DELFIELD(kIString64_2, istring64_2);
DELFIELD(kText_1, text_1);
DELFIELD(kText_2, text_2);
DELFIELD(kBlob_1, blob_1);
DELFIELD(kBlob_2, blob_2);
default: break;
}
}
free(node->createAgeName);
free(node->string64_1);
free(node->string64_2);
free(node->string64_3);
free(node->string64_4);
free(node->string64_5);
free(node->string64_6);
free(node->istring64_1);
free(node->istring64_2);
free(node->text_1);
free(node->text_2);
free(node->blob_1);
free(node->blob_2);
}
//============================================================================

View File

@ -247,7 +247,7 @@ struct NetVaultNode : AtomicRef {
wchar_t * text_2;
uint8_t * blob_1; uint32_t blob_1Length;
uint8_t * blob_2; uint32_t blob_2Length;
NetVaultNode ();
~NetVaultNode ();