aboutsummaryrefslogtreecommitdiffstats
path: root/src/save
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-04-18 23:58:43 +0300
committerSergeanur <s.anureev@yandex.ua>2020-04-18 23:58:43 +0300
commitfce2e02444a056cc420be6b32844de039fbfafac (patch)
treebd1aa187dd24640469ee956e7551341cc9819ad5 /src/save
parent9bfcaff84976b2af7242f846c782287e9bacf851 (diff)
Fix savename buffer overflow
Diffstat (limited to 'src/save')
-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);