summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/save/GenericGameStorage.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp
index 763f516a..5e483dc7 100644
--- a/src/save/GenericGameStorage.cpp
+++ b/src/save/GenericGameStorage.cpp
@@ -112,14 +112,22 @@ GenericSave(int file)
// Save simple vars
lastMissionPassed = TheText.Get(CStats::LastMissionPassedName);
- if (*lastMissionPassed) {
+ if (lastMissionPassed[0] != '\0') {
AsciiToUnicode("...'", suffix);
+#ifdef FIX_BUGS
+ // fix buffer overflow
+ int len = UnicodeStrlen(lastMissionPassed);
+ if (len > ARRAY_SIZE(saveName)-1)
+ len = ARRAY_SIZE(saveName)-1;
+ memcpy(saveName, lastMissionPassed, sizeof(wchar) * len);
+#else
TextCopy(saveName, lastMissionPassed);
int len = UnicodeStrlen(saveName);
+#endif
saveName[len] = '\0';
- if (len > 22)
- TextCopy(saveName + 18, suffix);
- saveName[23] = '\0';
+ if (len > ARRAY_SIZE(saveName)-2)
+ TextCopy(&saveName[ARRAY_SIZE(saveName)-ARRAY_SIZE(suffix)], suffix);
+ saveName[ARRAY_SIZE(saveName)-1] = '\0';
}
WriteDataToBufferPointer(buf, saveName);
GetLocalTime(&saveTime);