From 17da294c3165e790dd9f284db5987ff587c143b1 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 21:30:32 +0000 Subject: [PATCH] bugfix(memory): Improve GameMemory null safety and logic --- Generals/Code/GameEngine/Source/Common/System/GameMemory.cpp | 5 +++-- .../Code/GameEngine/Source/Common/System/GameMemory.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Generals/Code/GameEngine/Source/Common/System/GameMemory.cpp b/Generals/Code/GameEngine/Source/Common/System/GameMemory.cpp index f760d6f470f..405cf803643 100644 --- a/Generals/Code/GameEngine/Source/Common/System/GameMemory.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/GameMemory.cpp @@ -1451,7 +1451,7 @@ BlockCheckpointInfo *Checkpointable::debugAddCheckpointInfo( { #ifdef MEMORYPOOL_STACKTRACE void **stacktrace = bi->getStacktraceInfo(); - if (theStackTraceDepth > 0 && !TheGlobalData || TheGlobalData->m_checkForLeaks) + if (theStackTraceDepth > 0 && (!TheGlobalData || TheGlobalData->m_checkForLeaks)) { memset(stacktrace, 0, MEMORYPOOL_STACKTRACE_SIZE_BYTES); ::FillStackAddresses(stacktrace, min(MEMORYPOOL_STACKTRACE_SIZE, theStackTraceDepth), MEMORYPOOL_STACKTRACE_SKIP_SIZE); @@ -1584,7 +1584,8 @@ MemoryPoolBlob* MemoryPool::createBlob(Int allocationCount) blob->addBlobToList(&m_firstBlob, &m_lastBlob); DEBUG_ASSERTCRASH(m_firstBlobWithFreeBlocks == NULL, ("DO NOT IGNORE. Please call John McD - x36872 (m_firstBlobWithFreeBlocks != NULL)")); - m_firstBlobWithFreeBlocks = blob; + if (m_firstBlobWithFreeBlocks == NULL) + m_firstBlobWithFreeBlocks = blob; // bookkeeping m_totalBlocksInPool += allocationCount; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/GameMemory.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/GameMemory.cpp index 2b7d51f52bc..7cdbe137fe3 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/GameMemory.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/GameMemory.cpp @@ -1432,7 +1432,7 @@ BlockCheckpointInfo *Checkpointable::debugAddCheckpointInfo( { #ifdef MEMORYPOOL_STACKTRACE void **stacktrace = bi->getStacktraceInfo(); - if (theStackTraceDepth > 0 && !TheGlobalData || TheGlobalData->m_checkForLeaks) + if (theStackTraceDepth > 0 && (!TheGlobalData || TheGlobalData->m_checkForLeaks)) { memset(stacktrace, 0, MEMORYPOOL_STACKTRACE_SIZE_BYTES); ::FillStackAddresses(stacktrace, min(MEMORYPOOL_STACKTRACE_SIZE, theStackTraceDepth), MEMORYPOOL_STACKTRACE_SKIP_SIZE); @@ -1565,7 +1565,8 @@ MemoryPoolBlob* MemoryPool::createBlob(Int allocationCount) blob->addBlobToList(&m_firstBlob, &m_lastBlob); DEBUG_ASSERTCRASH(m_firstBlobWithFreeBlocks == nullptr, ("DO NOT IGNORE. Please call John McD - x36872 (m_firstBlobWithFreeBlocks != nullptr)")); - m_firstBlobWithFreeBlocks = blob; + if (m_firstBlobWithFreeBlocks == nullptr) + m_firstBlobWithFreeBlocks = blob; // bookkeeping m_totalBlocksInPool += allocationCount;