From 28bc5eca378059c105c1ab7919afcebaaa704ca8 Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 17 Aug 2012 22:14:35 +1000 Subject: [PATCH] Added a check for out of bounds memory accesses. Fixes Avatar: The Last Airbender (GC). --- Source/Core/Core/Src/HW/Memmap.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/Src/HW/Memmap.cpp b/Source/Core/Core/Src/HW/Memmap.cpp index a4eab5390b..1156d456ad 100644 --- a/Source/Core/Core/Src/HW/Memmap.cpp +++ b/Source/Core/Core/Src/HW/Memmap.cpp @@ -635,7 +635,8 @@ u8 *GetPointer(const u32 _Address) { case 0x0: case 0x8: - return m_pPhysicalRAM + (_Address & RAM_MASK); + if ((_Address & 0xfffffff) < REALRAM_SIZE) + return m_pPhysicalRAM + (_Address & RAM_MASK); case 0xc: switch (_Address >> 24) { @@ -647,14 +648,16 @@ u8 *GetPointer(const u32 _Address) break; default: - return m_pPhysicalRAM + (_Address & RAM_MASK); + if ((_Address & 0xfffffff) < REALRAM_SIZE) + return m_pPhysicalRAM + (_Address & RAM_MASK); } case 0x1: case 0x9: case 0xd: if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) - return m_pPhysicalEXRAM + (_Address & EXRAM_MASK); + if ((_Address & 0xfffffff) < EXRAM_SIZE) + return m_pPhysicalEXRAM + (_Address & EXRAM_MASK); else break;