From 63adafd9672fa14df85af7e02bb62ccca52e2b06 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sat, 15 Feb 2014 07:28:52 +0800 Subject: [PATCH 1/3] avoid invalid memory in sceMp3ReserveMp3Handle Find in Heroes Phantasia --- Core/HLE/sceMp3.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Core/HLE/sceMp3.cpp b/Core/HLE/sceMp3.cpp index 39c2fa70ca..e9e93f89f0 100644 --- a/Core/HLE/sceMp3.cpp +++ b/Core/HLE/sceMp3.cpp @@ -323,13 +323,16 @@ u32 sceMp3ReserveMp3Handle(u32 mp3Addr) { memset(ctx, 0, sizeof(Mp3Context)); - ctx->mp3StreamStart = Memory::Read_U64(mp3Addr); - ctx->mp3StreamEnd = Memory::Read_U64(mp3Addr+8); - ctx->mp3Buf = Memory::Read_U32(mp3Addr+16); - ctx->mp3BufSize = Memory::Read_U32(mp3Addr+20); - ctx->mp3PcmBuf = Memory::Read_U32(mp3Addr+24); - ctx->mp3PcmBufSize = Memory::Read_U32(mp3Addr+28); - + if (!Memory::IsValidAddress(mp3Addr)) + WARN_LOG(ME, "sceMp3ReserveMp3Handle invalid address") + else { + ctx->mp3StreamStart = Memory::Read_U64(mp3Addr); + ctx->mp3StreamEnd = Memory::Read_U64(mp3Addr + 8); + ctx->mp3Buf = Memory::Read_U32(mp3Addr + 16); + ctx->mp3BufSize = Memory::Read_U32(mp3Addr + 20); + ctx->mp3PcmBuf = Memory::Read_U32(mp3Addr + 24); + ctx->mp3PcmBufSize = Memory::Read_U32(mp3Addr + 28); + } ctx->readPosition = ctx->mp3StreamStart; ctx->mp3MaxSamples = ctx->mp3PcmBufSize / 4 ; From 88d1cb7016a9b3b53730e06f243104e7608d454a Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sat, 15 Feb 2014 20:15:49 +0800 Subject: [PATCH 2/3] More logging --- Core/HLE/sceMp3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceMp3.cpp b/Core/HLE/sceMp3.cpp index e9e93f89f0..cf231dcac6 100644 --- a/Core/HLE/sceMp3.cpp +++ b/Core/HLE/sceMp3.cpp @@ -324,7 +324,7 @@ u32 sceMp3ReserveMp3Handle(u32 mp3Addr) { memset(ctx, 0, sizeof(Mp3Context)); if (!Memory::IsValidAddress(mp3Addr)) - WARN_LOG(ME, "sceMp3ReserveMp3Handle invalid address") + WARN_LOG(ME, "sceMp3ReserveMp3Handle(%08x) invalid address",mp3Addr) else { ctx->mp3StreamStart = Memory::Read_U64(mp3Addr); ctx->mp3StreamEnd = Memory::Read_U64(mp3Addr + 8); From 9868734656facbb5a4892ff986989add46f3df1d Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sat, 15 Feb 2014 20:20:04 +0800 Subject: [PATCH 3/3] Add report --- Core/HLE/sceMp3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceMp3.cpp b/Core/HLE/sceMp3.cpp index cf231dcac6..490e56edda 100644 --- a/Core/HLE/sceMp3.cpp +++ b/Core/HLE/sceMp3.cpp @@ -324,7 +324,7 @@ u32 sceMp3ReserveMp3Handle(u32 mp3Addr) { memset(ctx, 0, sizeof(Mp3Context)); if (!Memory::IsValidAddress(mp3Addr)) - WARN_LOG(ME, "sceMp3ReserveMp3Handle(%08x) invalid address",mp3Addr) + WARN_LOG_REPORT(ME, "sceMp3ReserveMp3Handle(%08x) invalid address",mp3Addr) else { ctx->mp3StreamStart = Memory::Read_U64(mp3Addr); ctx->mp3StreamEnd = Memory::Read_U64(mp3Addr + 8);