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
This commit is contained in:
drkiiraziel
2008-11-15 02:30:29 +00:00
parent ab1774b28a
commit 9a4dc4e810
5 changed files with 39 additions and 29 deletions

View File

@ -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;