From cb7db104dd287f0212c00abbe5733c5e7e5bb5a2 Mon Sep 17 00:00:00 2001
From: Mike Hearn <mike@theoretic.com>
Date: Tue, 22 Jul 2003 01:01:06 +0000
Subject: [PATCH] IMallocSpy cannot cause an allocation failure when cb == 0.

---
 dlls/ole32/ifs.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/dlls/ole32/ifs.c b/dlls/ole32/ifs.c
index 4c13a498597..15dfe3a3fdd 100644
--- a/dlls/ole32/ifs.c
+++ b/dlls/ole32/ifs.c
@@ -144,16 +144,18 @@ static LPVOID WINAPI IMalloc_fnAlloc(LPMALLOC iface, DWORD cb) {
 	TRACE("(%ld)\n",cb);
 
 	if(Malloc32.pSpy) {
+	    DWORD preAllocResult;
+	    
 	    EnterCriticalSection(&IMalloc32_SpyCS);
-	    cb = IMallocSpy_PreAlloc(Malloc32.pSpy, cb);
-	    if (0==cb) {
-	        /* PreAlloc can force Alloc to fail */
-	        LeaveCriticalSection(&IMalloc32_SpyCS);
+	    preAllocResult = IMallocSpy_PreAlloc(Malloc32.pSpy, cb);
+	    if ((cb != 0) && (preAllocResult == 0)) {
+		/* PreAlloc can force Alloc to fail, but not if cb == 0 */
+		TRACE("returning null\n");
+		LeaveCriticalSection(&IMalloc32_SpyCS);
 		return NULL;
 	    }
 	}
-
-
+ 	
 	addr = HeapAlloc(GetProcessHeap(),0,cb);
 
 	if(Malloc32.pSpy) {
-- 
GitLab