diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index 8e03f064594..b9ba556db98 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -4327,7 +4327,9 @@ void HeightMapRenderObjClass::renderExtraBlendTiles(void) DynamicIBAccessClass::WriteLockClass lockib(&ib_access); UnsignedShort *ib=lockib.Get_Index_Array(); - if (!vb || !ib) return; + // Enhanced pointer validation: check for NULL and suspiciously low addresses that indicate + // invalid/corrupted pointers from failed buffer allocation or device in degraded state + if (!vb || !ib || (size_t)vb < 0x10000 || (size_t)ib < 0x10000) return; const UnsignedByte* data = m_map->getDataPtr(); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp index 6b7dbd25a84..66c93739743 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/HeightMap.cpp @@ -2267,7 +2267,9 @@ void HeightMapRenderObjClass::renderExtraBlendTiles(void) DynamicIBAccessClass::WriteLockClass lockib(&ib_access); UnsignedShort *ib=lockib.Get_Index_Array(); - if (!vb || !ib) return; + // Enhanced pointer validation: check for NULL and suspiciously low addresses that indicate + // invalid/corrupted pointers from failed buffer allocation or device in degraded state + if (!vb || !ib || (size_t)vb < 0x10000 || (size_t)ib < 0x10000) return; const UnsignedByte* data = m_map->getDataPtr();