Skip to content

Commit 7fff044

Browse files
authored
[GEN][ZH] Fix crash when DEBUG_CRASHING is enabled and loading a replay with unicode characters (#824)
1 parent 035624e commit 7fff044

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

Generals/Code/GameEngine/Source/Common/Recorder.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,8 +1099,8 @@ Bool RecorderClass::playbackFile(AsciiString filename)
10991099
{
11001100
return FALSE;
11011101
}
1102-
#ifdef DEBUG_LOGGING
11031102

1103+
#ifdef DEBUG_CRASHING
11041104
Bool versionStringDiff = header.versionString != TheVersion->getUnicodeVersion();
11051105
Bool versionTimeStringDiff = header.versionTimeString != TheVersion->getUnicodeBuildTime();
11061106
Bool versionNumberDiff = header.versionNumber != TheVersion->getVersionNumber();
@@ -1112,15 +1112,20 @@ Bool RecorderClass::playbackFile(AsciiString filename)
11121112
AsciiString tempStr;
11131113
if (exeDifferent)
11141114
{
1115+
// TheSuperHackers @fix helmutbuhler 05/05/2025 No longer attempts to print unicode as ascii
1116+
// via a call to AsciiString::format with %ls format. It does not work with non-ascii characters.
1117+
UnicodeString tempStrWide;
11151118
debugString = "EXE is different:\n";
11161119
if (versionStringDiff)
11171120
{
1118-
tempStr.format(" Version [%ls] vs [%ls]\n", TheVersion->getUnicodeVersion().str(), header.versionString.str());
1121+
tempStrWide.format(L" Version [%s] vs [%s]\n", TheVersion->getUnicodeVersion().str(), header.versionString.str());
1122+
tempStr.translate(tempStrWide);
11191123
debugString.concat(tempStr);
11201124
}
11211125
if (versionTimeStringDiff)
11221126
{
1123-
tempStr.format(" Build Time [%ls] vs [%ls]\n", TheVersion->getUnicodeBuildTime().str(), header.versionTimeString.str());
1127+
tempStrWide.format(L" Build Time [%s] vs [%s]\n", TheVersion->getUnicodeBuildTime().str(), header.versionTimeString.str());
1128+
tempStr.translate(tempStrWide);
11241129
debugString.concat(tempStr);
11251130
}
11261131
if (versionNumberDiff)

GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,8 +1102,8 @@ Bool RecorderClass::playbackFile(AsciiString filename)
11021102
{
11031103
return FALSE;
11041104
}
1105-
#ifdef DEBUG_LOGGING
11061105

1106+
#ifdef DEBUG_CRASHING
11071107
Bool versionStringDiff = header.versionString != TheVersion->getUnicodeVersion();
11081108
Bool versionTimeStringDiff = header.versionTimeString != TheVersion->getUnicodeBuildTime();
11091109
Bool versionNumberDiff = header.versionNumber != TheVersion->getVersionNumber();
@@ -1115,15 +1115,20 @@ Bool RecorderClass::playbackFile(AsciiString filename)
11151115
AsciiString tempStr;
11161116
if (exeDifferent)
11171117
{
1118+
// TheSuperHackers @fix helmutbuhler 05/05/2025 No longer attempts to print unicode as ascii
1119+
// via a call to AsciiString::format with %ls format. It does not work with non-ascii characters.
1120+
UnicodeString tempStrWide;
11181121
debugString = "EXE is different:\n";
11191122
if (versionStringDiff)
11201123
{
1121-
tempStr.format(" Version [%ls] vs [%ls]\n", TheVersion->getUnicodeVersion().str(), header.versionString.str());
1124+
tempStrWide.format(L" Version [%s] vs [%s]\n", TheVersion->getUnicodeVersion().str(), header.versionString.str());
1125+
tempStr.translate(tempStrWide);
11221126
debugString.concat(tempStr);
11231127
}
11241128
if (versionTimeStringDiff)
11251129
{
1126-
tempStr.format(" Build Time [%ls] vs [%ls]\n", TheVersion->getUnicodeBuildTime().str(), header.versionTimeString.str());
1130+
tempStrWide.format(L" Build Time [%s] vs [%s]\n", TheVersion->getUnicodeBuildTime().str(), header.versionTimeString.str());
1131+
tempStr.translate(tempStrWide);
11271132
debugString.concat(tempStr);
11281133
}
11291134
if (versionNumberDiff)

0 commit comments

Comments
 (0)