From 9cde330faf1d07defb362a5c029a824b5f3c45af Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:08:47 +0000 Subject: [PATCH] DX8IndexBuffer: Add null checks before using index_buffer --- .../Source/WWVegas/WW3D2/dx8indexbuffer.cpp | 39 ++++++++++++------- .../Source/WWVegas/WW3D2/dx8indexbuffer.cpp | 39 ++++++++++++------- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp b/Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp index 7e818fcbed9..2218a766e62 100644 --- a/Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp +++ b/Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp @@ -190,11 +190,13 @@ IndexBufferClass::WriteLockClass::WriteLockClass(IndexBufferClass* index_buffer_ switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->Get_DX8_Index_Buffer()->Lock( - 0, - index_buffer->Get_Index_Count()*sizeof(WORD), - (unsigned char**)&indices, - flags)); + if (static_cast(index_buffer)->Get_DX8_Index_Buffer()) { + DX8_ErrorCode(static_cast(index_buffer)->Get_DX8_Index_Buffer()->Lock( + 0, + index_buffer->Get_Index_Count()*sizeof(WORD), + (unsigned char**)&indices, + flags)); + } break; case BUFFER_TYPE_SORTING: indices=static_cast(index_buffer)->index_buffer; @@ -216,7 +218,9 @@ IndexBufferClass::WriteLockClass::~WriteLockClass() switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + } break; case BUFFER_TYPE_SORTING: break; @@ -241,11 +245,13 @@ IndexBufferClass::AppendLockClass::AppendLockClass(IndexBufferClass* index_buffe switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Lock( - start_index*sizeof(unsigned short), - index_range*sizeof(unsigned short), - (unsigned char**)&indices, - 0)); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Lock( + start_index*sizeof(unsigned short), + index_range*sizeof(unsigned short), + (unsigned char**)&indices, + 0)); + } break; case BUFFER_TYPE_SORTING: indices=static_cast(index_buffer)->index_buffer+start_index; @@ -264,7 +270,9 @@ IndexBufferClass::AppendLockClass::~AppendLockClass() switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + } break; case BUFFER_TYPE_SORTING: break; @@ -283,7 +291,8 @@ IndexBufferClass::AppendLockClass::~AppendLockClass() DX8IndexBufferClass::DX8IndexBufferClass(unsigned short index_count_,UsageType usage) : - IndexBufferClass(BUFFER_TYPE_DX8,index_count_) + IndexBufferClass(BUFFER_TYPE_DX8,index_count_), + index_buffer(NULL) { DX8_THREAD_ASSERT(); WWASSERT(index_count); @@ -305,7 +314,9 @@ DX8IndexBufferClass::DX8IndexBufferClass(unsigned short index_count_,UsageType u DX8IndexBufferClass::~DX8IndexBufferClass() { - index_buffer->Release(); + if (index_buffer) { + index_buffer->Release(); + } } // ---------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp index 12bd6d00682..a1d31936769 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8indexbuffer.cpp @@ -191,11 +191,13 @@ IndexBufferClass::WriteLockClass::WriteLockClass(IndexBufferClass* index_buffer_ switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->Get_DX8_Index_Buffer()->Lock( - 0, - index_buffer->Get_Index_Count()*sizeof(WORD), - (unsigned char**)&indices, - flags)); + if (static_cast(index_buffer)->Get_DX8_Index_Buffer()) { + DX8_ErrorCode(static_cast(index_buffer)->Get_DX8_Index_Buffer()->Lock( + 0, + index_buffer->Get_Index_Count()*sizeof(WORD), + (unsigned char**)&indices, + flags)); + } break; case BUFFER_TYPE_SORTING: indices=static_cast(index_buffer)->index_buffer; @@ -217,7 +219,9 @@ IndexBufferClass::WriteLockClass::~WriteLockClass() switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + } break; case BUFFER_TYPE_SORTING: break; @@ -242,11 +246,13 @@ IndexBufferClass::AppendLockClass::AppendLockClass(IndexBufferClass* index_buffe switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Lock( - start_index*sizeof(unsigned short), - index_range*sizeof(unsigned short), - (unsigned char**)&indices, - 0)); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Lock( + start_index*sizeof(unsigned short), + index_range*sizeof(unsigned short), + (unsigned char**)&indices, + 0)); + } break; case BUFFER_TYPE_SORTING: indices=static_cast(index_buffer)->index_buffer+start_index; @@ -265,7 +271,9 @@ IndexBufferClass::AppendLockClass::~AppendLockClass() switch (index_buffer->Type()) { case BUFFER_TYPE_DX8: DX8_Assert(); - DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + if (static_cast(index_buffer)->index_buffer) { + DX8_ErrorCode(static_cast(index_buffer)->index_buffer->Unlock()); + } break; case BUFFER_TYPE_SORTING: break; @@ -284,7 +292,8 @@ IndexBufferClass::AppendLockClass::~AppendLockClass() DX8IndexBufferClass::DX8IndexBufferClass(unsigned short index_count_,UsageType usage) : - IndexBufferClass(BUFFER_TYPE_DX8,index_count_) + IndexBufferClass(BUFFER_TYPE_DX8,index_count_), + index_buffer(NULL) { DX8_THREAD_ASSERT(); WWASSERT(index_count); @@ -338,7 +347,9 @@ DX8IndexBufferClass::DX8IndexBufferClass(unsigned short index_count_,UsageType u DX8IndexBufferClass::~DX8IndexBufferClass() { - index_buffer->Release(); + if (index_buffer) { + index_buffer->Release(); + } } // ----------------------------------------------------------------------------