diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c index af0315d6c0..f5abc1ca89 100644 --- a/dlls/avifil32/avifile.c +++ b/dlls/avifil32/avifile.c @@ -1424,11 +1424,21 @@ static HRESULT AVIFILE_AddRecord(IAVIFileImpl *This) /* pre-conditions */ assert(This != NULL && This->ppStreams[0] != NULL); - if (This->idxRecords == NULL || This->cbIdxRecords == 0) { - This->cbIdxRecords += 1024 * sizeof(AVIINDEXENTRY); - This->idxRecords = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->cbIdxRecords); - if (This->idxRecords == NULL) + if (This->idxRecords == NULL || This->cbIdxRecords / sizeof(AVIINDEXENTRY) <= This->nIdxRecords) { + DWORD new_count = This->cbIdxRecords + 1024 * sizeof(AVIINDEXENTRY); + void *mem; + if (!This->idxRecords) + mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, new_count); + else + mem = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->idxRecords, new_count); + if (mem) { + This->cbIdxRecords = new_count; + This->idxRecords = mem; + } else { + HeapFree(GetProcessHeap(), 0, This->idxRecords); + This->idxRecords = NULL; return AVIERR_MEMORY; + } } assert(This->nIdxRecords < This->cbIdxRecords/sizeof(AVIINDEXENTRY));