oleaut32: Grow the marshalling buffer exponentially.
authorDmitry Timoshkov <dmitry@baikal.ru>
Thu, 26 Nov 2015 06:52:03 +0000 (14:52 +0800)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 26 Nov 2015 15:24:34 +0000 (00:24 +0900)
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
dlls/oleaut32/tmarshal.c

index f4ce311f25250b8155e91f52bf2c493f462977b5..5fd1fdd6338fae48f8b338b295dc9a5ed7295074 100644 (file)
@@ -79,12 +79,14 @@ xbuf_resize(marshal_state *buf, DWORD newsize)
 
     if(buf->base)
     {
+        newsize = max(newsize, buf->size * 2);
         buf->base = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buf->base, newsize);
         if(!buf->base)
             return E_OUTOFMEMORY;
     }
     else
     {
+        newsize = max(newsize, 256);
         buf->base = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, newsize);
         if(!buf->base)
             return E_OUTOFMEMORY;
@@ -100,7 +102,7 @@ xbuf_add(marshal_state *buf, const BYTE *stuff, DWORD size)
 
     if(buf->size - buf->curoff < size)
     {
-        hr = xbuf_resize(buf, buf->size + size + 100);
+        hr = xbuf_resize(buf, buf->size + size);
         if(FAILED(hr)) return hr;
     }
     memcpy(buf->base+buf->curoff,stuff,size);