From a7bbf47f1b51e388a19e741986cca33feeff1447 Mon Sep 17 00:00:00 2001 From: Dave Belanger Date: Wed, 8 Oct 2003 22:33:35 +0000 Subject: [PATCH] Avoid excessive heap memory reallocation when generating EMF metarecords in memory. --- dlls/gdi/enhmfdrv/init.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/gdi/enhmfdrv/init.c b/dlls/gdi/enhmfdrv/init.c index 4c7323b6cc..9ce54607c8 100644 --- a/dlls/gdi/enhmfdrv/init.c +++ b/dlls/gdi/enhmfdrv/init.c @@ -185,12 +185,16 @@ BOOL EMFDRV_WriteRecord( PHYSDEV dev, EMR *emr ) if (!WriteFile(physDev->hFile, (char *)emr, emr->nSize, NULL, NULL)) return FALSE; } else { - len = physDev->emh->nBytes; - emh = HeapReAlloc( GetProcessHeap(), 0, physDev->emh, len ); - if (!emh) return FALSE; - physDev->emh = emh; - memcpy((CHAR *)physDev->emh + physDev->emh->nBytes - emr->nSize, emr, - emr->nSize); + DWORD nEmfSize = HeapSize(GetProcessHeap(), 0, physDev->emh); + len = physDev->emh->nBytes; + if (len > nEmfSize) { + nEmfSize += (nEmfSize / 2) + emr->nSize; + emh = HeapReAlloc(GetProcessHeap(), 0, physDev->emh, nEmfSize); + if (!emh) return FALSE; + physDev->emh = emh; + } + memcpy((CHAR *)physDev->emh + physDev->emh->nBytes - emr->nSize, emr, + emr->nSize); } return TRUE; } -- 2.32.0.93.g670b81a890