diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp index 057942dcf88..528811250bc 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp @@ -926,7 +926,9 @@ void Player::initFromDict(const Dict* d) // Now do the TheKey_teamGenericScriptHookN (where N can be from 0 to 15.) for (j = 0; j < MAX_GENERIC_SCRIPTS; ++j) { AsciiString keyName; - keyName.format("%s%d", TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook).str(), j); + // Store the result of keyToName in a local variable to avoid dangling pointer + AsciiString hookName = TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook); + keyName.format("%s%d", hookName.str(), j); tmpStr = teamDict.getAsciiString(NAMEKEY(keyName), &exists); if (exists && !tmpStr.isEmpty()) { diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Team.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Team.cpp index 358c93c0b20..fbddbccafe5 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Team.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Team.cpp @@ -740,7 +740,9 @@ TeamTemplateInfo::TeamTemplateInfo(Dict *d) : // Which scripts to attempt during run? for (int i = 0; i < MAX_GENERIC_SCRIPTS; ++i) { AsciiString keyName; - keyName.format("%s%d", TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook).str(), i); + // Store the result of keyToName in a local variable to avoid dangling pointer + AsciiString hookName = TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook); + keyName.format("%s%d", hookName.str(), i); m_teamGenericScripts[i] = d->getAsciiString(NAMEKEY(keyName), &exists); if (!exists) { m_teamGenericScripts[i].clear(); diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp index 39de69f101c..14038b17021 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp @@ -979,7 +979,9 @@ void Player::initFromDict(const Dict* d) // Now do the TheKey_teamGenericScriptHookN (where N can be from 0 to 15.) for (j = 0; j < MAX_GENERIC_SCRIPTS; ++j) { AsciiString keyName; - keyName.format("%s%d", TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook).str(), j); + // Store the result of keyToName in a local variable to avoid dangling pointer + AsciiString hookName = TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook); + keyName.format("%s%d", hookName.str(), j); tmpStr = teamDict.getAsciiString(NAMEKEY(keyName), &exists); if (exists && !tmpStr.isEmpty()) { diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Team.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Team.cpp index 50b7b993649..55396eef503 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Team.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Team.cpp @@ -740,7 +740,9 @@ TeamTemplateInfo::TeamTemplateInfo(Dict *d) : // Which scripts to attempt during run? for (int i = 0; i < MAX_GENERIC_SCRIPTS; ++i) { AsciiString keyName; - keyName.format("%s%d", TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook).str(), i); + // Store the result of keyToName in a local variable to avoid dangling pointer + AsciiString hookName = TheNameKeyGenerator->keyToName(TheKey_teamGenericScriptHook); + keyName.format("%s%d", hookName.str(), i); m_teamGenericScripts[i] = d->getAsciiString(NAMEKEY(keyName), &exists); if (!exists) { m_teamGenericScripts[i].clear();