From 9a4dc4e8102d10feef3d324ace7a3198013c5bd6 Mon Sep 17 00:00:00 2001 From: drkiiraziel Date: Sat, 15 Nov 2008 02:30:29 +0000 Subject: Fixed small buffer overruns and other minor bugs that were found by VS2008 code analysis Added a check on both video plugins to prevent crashing when Memory_GetPtr retuns null pointer at ExecuteDisplayList (invalid address? Dave Mirra BMX 2 crashes there ...) git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1179 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp | 29 +++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp b/Source/Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp index f65714bf49..f46302c6b9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/OpcodeDecoding.cpp @@ -51,20 +51,25 @@ static void ExecuteDisplayList(u32 address, u32 size) u8* old_pVideoData = g_pVideoData; u8* startAddress = Memory_GetPtr(address); - g_pVideoData = startAddress; - // temporarily swap dl and non-dl (small "hack" for the stats) - Statistics::SwapDL(); - - while ((u32)(g_pVideoData - startAddress) < size) - { - Decode(); - } - INCSTAT(stats.numDListsCalled); - INCSTAT(stats.thisFrame.numDListsCalled); + //Avoid the crash if Memory_GetPtr failed .. + if (startAddress!=0) + { + g_pVideoData = startAddress; - // un-swap - Statistics::SwapDL(); + // temporarily swap dl and non-dl (small "hack" for the stats) + Statistics::SwapDL(); + + while ((u32)(g_pVideoData - startAddress) < size) + { + Decode(); + } + INCSTAT(stats.numDListsCalled); + INCSTAT(stats.thisFrame.numDListsCalled); + + // un-swap + Statistics::SwapDL(); + } // reset to the old pointer g_pVideoData = old_pVideoData; -- cgit v1.2.3