From 6358f4ec6256305161d28250616f7ae313c19b35 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Wed, 4 Sep 2013 20:18:21 +0800 Subject: [PATCH 1/3] Fix Summon Night 5,when there is a save,make new game would crash --- Core/Dialog/SavedataParam.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 7e6d0d5e05..d3e336ab14 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -526,7 +526,8 @@ bool SavedataParam::Load(SceUtilitySavedataParam *param, const std::string &save if(DecryptSave(decryptMode, data_base, &saveSize, &align_len, ((param->key[0] != 0)?cryptKey:0)) == 0) { - memcpy(data_, data_base, saveSize); + if (Memory::IsValidAddress(u32(data_))) + memcpy(data_, data_base, saveSize); saveDone = true; } delete[] data_base; From 3d20b8d7b04411f382677d91ecca7a623d98b550 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Wed, 4 Sep 2013 20:35:34 +0800 Subject: [PATCH 2/3] Fix crash in debug build --- Core/Dialog/SavedataParam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index d3e336ab14..59158cc4a7 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -526,7 +526,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 (Memory::IsValidAddress(u32(data_))) + if (Memory::IsValidAddress(u32(data_)) && Memory::IsValidAddress(u32(data_base))) memcpy(data_, data_base, saveSize); saveDone = true; } From f941b09909947e1ff341be2c2e9f4872c8ca6bc0 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Wed, 4 Sep 2013 23:14:39 +0800 Subject: [PATCH 3/3] better fix --- Core/Dialog/SavedataParam.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 59158cc4a7..cadf210436 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -526,7 +526,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 (Memory::IsValidAddress(u32(data_)) && Memory::IsValidAddress(u32(data_base))) + if (param->dataBuf.IsValid()) memcpy(data_, data_base, saveSize); saveDone = true; }