mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-26 11:22:17 -05:00
Fix rando save creation crash due to corrupted hint text (#1846)
This commit is contained in:
parent
e1a075268f
commit
57c1f4dce2
@ -958,25 +958,31 @@ void Randomizer::ParseHintLocationsFile(const char* spoilerFileName) {
|
||||
|
||||
bool success = false;
|
||||
|
||||
// Have all these use strncpy so that the null terminator is copied
|
||||
// and also set the last index to null for safety
|
||||
try {
|
||||
json spoilerFileJson;
|
||||
spoilerFileStream >> spoilerFileJson;
|
||||
|
||||
std::string childAltarJsonText = spoilerFileJson["childAltarText"].get<std::string>();
|
||||
std::string formattedChildAltarText = FormatJsonHintText(childAltarJsonText);
|
||||
memcpy(gSaveContext.childAltarText, formattedChildAltarText.c_str(), formattedChildAltarText.length());
|
||||
strncpy(gSaveContext.childAltarText, formattedChildAltarText.c_str(), sizeof(gSaveContext.childAltarText) - 1);
|
||||
gSaveContext.childAltarText[sizeof(gSaveContext.childAltarText) - 1] = 0;
|
||||
|
||||
std::string adultAltarJsonText = spoilerFileJson["adultAltarText"].get<std::string>();
|
||||
std::string formattedAdultAltarText = FormatJsonHintText(adultAltarJsonText);
|
||||
memcpy(gSaveContext.adultAltarText, formattedAdultAltarText.c_str(), formattedAdultAltarText.length());
|
||||
strncpy(gSaveContext.adultAltarText, formattedAdultAltarText.c_str(), sizeof(gSaveContext.adultAltarText) - 1);
|
||||
gSaveContext.adultAltarText[sizeof(gSaveContext.adultAltarText) - 1] = 0;
|
||||
|
||||
std::string ganonHintJsonText = spoilerFileJson["ganonHintText"].get<std::string>();
|
||||
std::string formattedGanonHintJsonText = FormatJsonHintText(ganonHintJsonText);
|
||||
memcpy(gSaveContext.ganonHintText, formattedGanonHintJsonText.c_str(), formattedGanonHintJsonText.length());
|
||||
strncpy(gSaveContext.ganonHintText, formattedGanonHintJsonText.c_str(), sizeof(gSaveContext.ganonHintText) - 1);
|
||||
gSaveContext.ganonHintText[sizeof(gSaveContext.ganonHintText) - 1] = 0;
|
||||
|
||||
std::string ganonJsonText = spoilerFileJson["ganonText"].get<std::string>();
|
||||
std::string formattedGanonJsonText = FormatJsonHintText(ganonJsonText);
|
||||
memcpy(gSaveContext.ganonText, formattedGanonJsonText.c_str(), formattedGanonJsonText.length());
|
||||
strncpy(gSaveContext.ganonText, formattedGanonJsonText.c_str(), sizeof(gSaveContext.ganonText) - 1);
|
||||
gSaveContext.ganonText[sizeof(gSaveContext.ganonText) - 1] = 0;
|
||||
|
||||
json hintsJson = spoilerFileJson["hints"];
|
||||
int index = 0;
|
||||
@ -984,7 +990,9 @@ void Randomizer::ParseHintLocationsFile(const char* spoilerFileName) {
|
||||
gSaveContext.hintLocations[index].check = SpoilerfileCheckNameToEnum[it.key()];
|
||||
|
||||
std::string hintMessage = FormatJsonHintText(it.value());
|
||||
memcpy(gSaveContext.hintLocations[index].hintText, hintMessage.c_str(), hintMessage.length());
|
||||
size_t maxHintTextSize = sizeof(gSaveContext.hintLocations[index].hintText);
|
||||
strncpy(gSaveContext.hintLocations[index].hintText, hintMessage.c_str(), maxHintTextSize - 1);
|
||||
gSaveContext.hintLocations[index].hintText[maxHintTextSize - 1] = 0;
|
||||
|
||||
index++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user