Andrew Nguyen : krnl386.exe: Fix a potential leak and NULL dereference in DPMI_xrealloc.

Alexandre Julliard julliard at winehq.org
Mon Jul 19 11:05:33 CDT 2010


Module: wine
Branch: master
Commit: be5d66f5d8df2fd90b6a0274cb12fe69a0d7385a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=be5d66f5d8df2fd90b6a0274cb12fe69a0d7385a

Author: Andrew Nguyen <anguyen at codeweavers.com>
Date:   Sun Jul 18 16:23:21 2010 -0500

krnl386.exe: Fix a potential leak and NULL dereference in DPMI_xrealloc.

---

 dlls/krnl386.exe16/int31.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/dlls/krnl386.exe16/int31.c b/dlls/krnl386.exe16/int31.c
index eb0f2c9..edcf0b3 100644
--- a/dlls/krnl386.exe16/int31.c
+++ b/dlls/krnl386.exe16/int31.c
@@ -263,21 +263,21 @@ static void DPMI_xfree( LPVOID ptr )
  *
  * FIXME: perhaps we could grow this mapped area... 
  */
-static LPVOID DPMI_xrealloc( LPVOID ptr, DWORD newsize ) 
+static LPVOID DPMI_xrealloc( LPVOID ptr, DWORD newsize )
 {
     MEMORY_BASIC_INFORMATION        mbi;
-    LPVOID                          newptr;
 
-    newptr = DPMI_xalloc( newsize );
-    if (ptr) 
+    if (ptr)
     {
-        if (!VirtualQuery(ptr,&mbi,sizeof(mbi))) 
+        LPVOID newptr;
+
+        if (!VirtualQuery(ptr,&mbi,sizeof(mbi)))
         {
             FIXME( "realloc of DPMI_xallocd region %p?\n", ptr );
             return NULL;
         }
 
-        if (mbi.State == MEM_FREE) 
+        if (mbi.State == MEM_FREE)
         {
             FIXME( "realloc of DPMI_xallocd region %p?\n", ptr );
             return NULL;
@@ -289,11 +289,17 @@ static LPVOID DPMI_xrealloc( LPVOID ptr, DWORD newsize )
         if (newsize <= mbi.RegionSize)
             return ptr;
 
+        newptr = DPMI_xalloc( newsize );
+        if (!newptr)
+            return NULL;
+
         memcpy( newptr, ptr, mbi.RegionSize );
         DPMI_xfree( ptr );
+
+        return newptr;
     }
 
-    return newptr;
+    return DPMI_xalloc( newsize );
 }
 
 




More information about the wine-cvs mailing list