From 7ab71039465505db5d68b830da1648f87e7bdb88 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 5 Jan 2010 21:29:02 +0100 Subject: [PATCH] avifil32: Don't leak the buffer on HeapReAlloc() failure in AVIFILE_AddFrame(). Perhaps the code should also just double the buffer. I can send another patch for that if needed. --- dlls/avifil32/avifile.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c index ea6d6b1332..57ebb114d6 100644 --- a/dlls/avifil32/avifile.c +++ b/dlls/avifil32/avifile.c @@ -1383,16 +1383,20 @@ static HRESULT AVIFILE_AddFrame(IAVIStreamImpl *This, DWORD ckid, DWORD size, DW } if (This->idxFmtChanges == NULL || This->nIdxFmtChanges <= This->sInfo.dwFormatChangeCount) { - This->nIdxFmtChanges += 16; - if (This->idxFmtChanges == NULL) + DWORD new_count = This->nIdxFmtChanges + 16; + void *new_buffer; + + if (This->idxFmtChanges == NULL) { This->idxFmtChanges = - HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->nIdxFmtChanges * sizeof(AVIINDEXENTRY)); - else - This->idxFmtChanges = - HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->idxFmtChanges, - This->nIdxFmtChanges * sizeof(AVIINDEXENTRY)); - if (This->idxFmtChanges == NULL) - return AVIERR_MEMORY; + HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, new_count * sizeof(AVIINDEXENTRY)); + if (!This->idxFmtChanges) return AVIERR_MEMORY; + } else { + new_buffer = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->idxFmtChanges, + new_count * sizeof(AVIINDEXENTRY)); + if (!new_buffer) return AVIERR_MEMORY; + This->idxFmtChanges = new_buffer; + } + This->nIdxFmtChanges = new_count; } This->sInfo.dwFlags |= AVISTREAMINFO_FORMATCHANGES;