From 63adafd9672fa14df85af7e02bb62ccca52e2b06 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sat, 15 Feb 2014 07:28:52 +0800 Subject: [PATCH] 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 ;