[ros-diffs] [greatlrd] 26860: Fixing another memory crash bug this time for GetFourCCCodes

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Mon May 21 22:51:56 CEST 2007


Author: greatlrd
Date: Tue May 22 00:51:55 2007
New Revision: 26860

URL: http://svn.reactos.org/svn/reactos?rev=26860&view=rev
Log:
Fixing another memory crash bug this time for GetFourCCCodes

Modified:
    trunk/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c
    trunk/reactos/dll/directx/ddraw/startup.c

Modified: trunk/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c?rev=26860&r1=26859&r2=26860&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c Tue May 22 00:51:55 2007
@@ -146,28 +146,31 @@
 Main_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD lpNumCodes, LPDWORD lpCodes)
 {
     LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
+    HRESULT retVal = DD_OK;
+
     DX_WINDBG_trace();
 
     /* FIXME protect with SEH or something else if lpCodes or lpNumCodes for bad user pointers */
     EnterCriticalSection(&ddcs);
 
-   if(!lpNumCodes)
-   {
-      LeaveCriticalSection(&ddcs);
-      return DDERR_INVALIDPARAMS;
-   }
-
-   if(lpCodes)
-   {
-      memcpy(lpCodes, This->lpLcl->lpGbl->lpdwFourCC, sizeof(DWORD)* min(This->lpLcl->lpGbl->dwNumFourCC, *lpNumCodes));
-   }
-   else
-   {
-      *lpNumCodes = This->lpLcl->lpGbl->dwNumFourCC;
-   }
+    if(!lpNumCodes)
+    {
+       retVal = DDERR_INVALIDPARAMS;
+    }
+    else
+    {
+       if ((lpCodes) && (*lpCodes))
+       {
+            memcpy(lpCodes, This->lpLcl->lpGbl->lpdwFourCC, sizeof(DWORD)* min(This->lpLcl->lpGbl->dwNumFourCC, *lpNumCodes));
+       }
+       else
+       {
+            *lpNumCodes = This->lpLcl->lpGbl->dwNumFourCC;
+       }
+    }
 
     LeaveCriticalSection(&ddcs);
-    return DD_OK;
+    return retVal;
 }
 
 HRESULT WINAPI 

Modified: trunk/reactos/dll/directx/ddraw/startup.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/startup.c?rev=26860&r1=26859&r2=26860&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/startup.c (original)
+++ trunk/reactos/dll/directx/ddraw/startup.c Tue May 22 00:51:55 2007
@@ -188,7 +188,7 @@
 
     if (reenable == FALSE)
     {
-        if (This->lpLink == NULL)
+        if ((!IsBadReadPtr(This->lpLink,sizeof(LPDIRECTDRAW))) && (This->lpLink == NULL))
         {
             RtlZeroMemory(&ddgbl, sizeof(DDRAWI_DIRECTDRAW_GBL));
             This->lpLcl->lpGbl->dwRefCnt++;
@@ -470,6 +470,8 @@
       // FIXME Close DX fristcall and second call
       return DD_FALSE;
     }
+    
+    DX_STUB_str("Here\n");
 
     /* Alloc mpFourCC */
     mpFourCC = NULL;




More information about the Ros-diffs mailing list