diff --git a/src/backend/executor/execHHashagg.c b/src/backend/executor/execHHashagg.c index ee2008717e03960d4514775dc1299c3d28f6e600..cf52f785cdd8e25e96c61bb22479b60082e1a38e 100644 --- a/src/backend/executor/execHHashagg.c +++ b/src/backend/executor/execHHashagg.c @@ -1626,11 +1626,13 @@ writeHashEntry(AggState *aggstate, BatchFileInfo *file_info, if ((aggDataOffset + MAXALIGN(datum_size)) >= aggDataBufferSize) { - aggDataBufferSize += BUFFER_INCREMENT_SIZE; + aggDataBufferSize += MAXALIGN(datum_size) >= BUFFER_INCREMENT_SIZE ? + MAXALIGN(datum_size) + BUFFER_INCREMENT_SIZE : BUFFER_INCREMENT_SIZE; MemoryContext oldAggContext = MemoryContextSwitchTo(TopMemoryContext); aggDataBuffer = repalloc(aggDataBuffer, aggDataBufferSize); MemoryContextSwitchTo(oldAggContext); } + Assert((aggDataOffset + MAXALIGN(datum_size)) <= aggDataBufferSize); memcpy((aggDataBuffer + aggDataOffset), datum_value, datum_size); aggDataOffset += MAXALIGN(datum_size);