From 9dddd0d90d0c1da5ff2802056695c67a9f83faab Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Wed, 13 Mar 2013 22:59:07 -0700 Subject: [PATCH] Validate addresses when analyzing atrac. --- Core/HLE/sceAtrac.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp index 507dff299f..decae6627c 100644 --- a/Core/HLE/sceAtrac.cpp +++ b/Core/HLE/sceAtrac.cpp @@ -133,6 +133,11 @@ void Atrac::Analyze() ERROR_LOG(HLE, "Atrac buffer very small: %d", first.size); return; } + if (!Memory::IsValidAddress(first.addr)) + { + WARN_LOG(HLE, "Atrac buffer at invalid address: %08x-%08x", first.addr, first.size); + return; + } // TODO: Validate stuff. @@ -142,6 +147,12 @@ void Atrac::Analyze() u32 offset = 12; while (first.size > offset + 8) { + if (!Memory::IsValidAddress(first.addr + offset)) + { + ERROR_LOG(HLE, "Atrac buffer %08x-%08x not valid at %08x", first.addr, first.addr + first.size, first.addr + offset); + return; + } + u32 magic = Memory::Read_U32(first.addr + offset); u32 size = Memory::Read_U32(first.addr + offset + 4); offset += 8;