diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 13dde9d7e6..c843e7d636 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -527,7 +527,7 @@ bool SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &save if(DecryptSave(decryptMode, data_base, &saveSize, &align_len, ((param->key[0] != 0)?cryptKey:0)) == 0) { if (param->dataBuf.IsValid()) - memcpy(data_, data_base, saveSize); + memcpy(data_, data_base, std::min(saveSize, (int)param->dataBufSize)); saveDone = true; } delete[] data_base; @@ -535,7 +535,8 @@ bool SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &save } if(!saveDone) // not crypted or decrypt fail { - memcpy(data_, saveData, saveSize); + if (param->dataBuf.IsValid()) + memcpy(data_, saveData, std::min(saveSize, (int)param->dataBufSize)); } param->dataSize = (SceSize)saveSize; delete[] saveData;