Fix savename buffer overflow

This commit is contained in:
Sergeanur 2020-04-18 23:58:43 +03:00
parent 9bfcaff849
commit fce2e02444
1 changed files with 12 additions and 4 deletions

View File

@ -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);