@@ -246,22 +246,36 @@ void GetAdditionalDisconnectsFromUserFile(PSPlayerStats *stats)
246246RankPoints::RankPoints (void )
247247{
248248 m_ranks[RANK_PRIVATE ] = 0 ;
249- // Use default values if TheGameSpyConfig is NULL (can happen if called during teardown)
250- if (TheGameSpyConfig != NULL )
251- {
252- m_ranks[RANK_CORPORAL ] = TheGameSpyConfig->getPointsForRank (RANK_CORPORAL ); // 5
253- m_ranks[RANK_SERGEANT ] = TheGameSpyConfig->getPointsForRank (RANK_SERGEANT ); // 10
254- m_ranks[RANK_LIEUTENANT ] = TheGameSpyConfig->getPointsForRank (RANK_LIEUTENANT ); // 20
255- m_ranks[RANK_CAPTAIN ] = TheGameSpyConfig->getPointsForRank (RANK_CAPTAIN ); // 50
256- m_ranks[RANK_MAJOR ] = TheGameSpyConfig->getPointsForRank (RANK_MAJOR ); // 100
257- m_ranks[RANK_COLONEL ] = TheGameSpyConfig->getPointsForRank (RANK_COLONEL ); // 200
258- m_ranks[RANK_BRIGADIER_GENERAL ] = TheGameSpyConfig->getPointsForRank (RANK_BRIGADIER_GENERAL ); // 500
259- m_ranks[RANK_GENERAL ] = TheGameSpyConfig->getPointsForRank (RANK_GENERAL ); // 1000
260- m_ranks[RANK_COMMANDER_IN_CHIEF ] = TheGameSpyConfig->getPointsForRank (RANK_COMMANDER_IN_CHIEF ); // 2000
249+
250+ // Validate TheGameSpyConfig pointer before use using helper function
251+ Bool isValidPointer = IsGameSpyConfigValid ();
252+
253+ if (isValidPointer)
254+ {
255+ // Additional safety: wrap in try-catch to handle any remaining access violations
256+ try
257+ {
258+ m_ranks[RANK_CORPORAL ] = TheGameSpyConfig->getPointsForRank (RANK_CORPORAL ); // 5
259+ m_ranks[RANK_SERGEANT ] = TheGameSpyConfig->getPointsForRank (RANK_SERGEANT ); // 10
260+ m_ranks[RANK_LIEUTENANT ] = TheGameSpyConfig->getPointsForRank (RANK_LIEUTENANT ); // 20
261+ m_ranks[RANK_CAPTAIN ] = TheGameSpyConfig->getPointsForRank (RANK_CAPTAIN ); // 50
262+ m_ranks[RANK_MAJOR ] = TheGameSpyConfig->getPointsForRank (RANK_MAJOR ); // 100
263+ m_ranks[RANK_COLONEL ] = TheGameSpyConfig->getPointsForRank (RANK_COLONEL ); // 200
264+ m_ranks[RANK_BRIGADIER_GENERAL ] = TheGameSpyConfig->getPointsForRank (RANK_BRIGADIER_GENERAL ); // 500
265+ m_ranks[RANK_GENERAL ] = TheGameSpyConfig->getPointsForRank (RANK_GENERAL ); // 1000
266+ m_ranks[RANK_COMMANDER_IN_CHIEF ] = TheGameSpyConfig->getPointsForRank (RANK_COMMANDER_IN_CHIEF ); // 2000
267+ }
268+ catch (...)
269+ {
270+ // If any exception occurs (e.g., access violation), fall back to default values
271+ DEBUG_LOG ((" RankPoints::RankPoints() - Exception accessing TheGameSpyConfig (possibly corrupted pointer), using defaults" ));
272+ isValidPointer = false ;
273+ }
261274 }
262- else
275+
276+ if (!isValidPointer)
263277 {
264- // Use default hardcoded values when TheGameSpyConfig is not available
278+ // Use default hardcoded values when TheGameSpyConfig is not available or corrupted
265279 m_ranks[RANK_CORPORAL ] = 5 ;
266280 m_ranks[RANK_SERGEANT ] = 10 ;
267281 m_ranks[RANK_LIEUTENANT ] = 20 ;
0 commit comments