Skip to content

Commit 6806a2c

Browse files
Maullerhelmutbuhler
andcommitted
[GEN][ZH] Fix uninitialized memory access in DockUpdate::loadDockPositions()
Co-authored-by: Helmut Buhler <buhler@8gadgetpack.net>
1 parent 7c1b1ac commit 6806a2c

File tree

2 files changed

+14
-2
lines changed
  • Generals/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate
  • GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate

2 files changed

+14
-2
lines changed

Generals/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/DockUpdate.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,13 @@ void DockUpdate::loadDockPositions()
501501
if( m_numberApproachPositions != DYNAMIC_APPROACH_VECTOR_FLAG )
502502
{
503503
// Dynamic means no bones
504-
Coord3D approachBones[DEFAULT_APPROACH_VECTOR_SIZE];
504+
// TheSuperHackers @fix helmutbuhler 19/04/2025
505+
// approachBones was originally not initialized. It needs to be initialized because
506+
// myDrawable->getPristineBonePositions only sets (m_numberApproachPositionBones) elements
507+
// The following code copies (m_numberApproachPositions) into m_approachPositions (which CRC indirectly depends on).
508+
// Initializing it to zero seems to work.
509+
510+
Coord3D approachBones[DEFAULT_APPROACH_VECTOR_SIZE] = {0};
505511
m_numberApproachPositionBones = myDrawable->getPristineBonePositions( "DockWaiting", 1, approachBones, NULL, m_numberApproachPositions);
506512
if( m_numberApproachPositions == m_approachPositions.size() )//safeguard: will always be true
507513
{

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/DockUpdate.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,13 @@ void DockUpdate::loadDockPositions()
510510
if( m_numberApproachPositions != DYNAMIC_APPROACH_VECTOR_FLAG )
511511
{
512512
// Dynamic means no bones
513-
Coord3D approachBones[DEFAULT_APPROACH_VECTOR_SIZE];
513+
// TheSuperHackers @fix helmutbuhler 19/04/2025
514+
// approachBones was originally not initialized. It needs to be initialized because
515+
// myDrawable->getPristineBonePositions only sets (m_numberApproachPositionBones) elements
516+
// The following code copies (m_numberApproachPositions) into m_approachPositions (which CRC indirectly depends on).
517+
// Initializing it to zero seems to work.
518+
519+
Coord3D approachBones[DEFAULT_APPROACH_VECTOR_SIZE] = {0};
514520
m_numberApproachPositionBones = myDrawable->getPristineBonePositions( "DockWaiting", 1, approachBones, NULL, m_numberApproachPositions);
515521
if( m_numberApproachPositions == m_approachPositions.size() )//safeguard: will always be true
516522
{

0 commit comments

Comments
 (0)