Fix potential data overflow.

This commit is contained in:
totaj
2022-11-07 19:18:02 +08:00
parent 6c83a22a47
commit c835e87ff8
3 changed files with 4 additions and 14 deletions

View File

@ -1938,15 +1938,6 @@ static TupleTableSlot* agg_retrieve_hash_table(AggState* aggstate)
return NULL; return NULL;
} }
int getPower2Num(int num)
{
int i = 1;
while (i < num) {
i <<= 1;
}
return i;
}
/* ----------------- /* -----------------
* ExecInitAgg * ExecInitAgg
* *
@ -2916,7 +2907,7 @@ Datum aggregate_dummy(PG_FUNCTION_ARGS)
} }
FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable, FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable,
TupleTableSlot* hashslot, int numGroups, bool isAgg, int planId, int dop, Instrumentation* instrument) TupleTableSlot* hashslot, int64 numGroups, bool isAgg, int planId, int dop, Instrumentation* instrument)
{ {
if (TempFileControl->spillToDisk == false) { if (TempFileControl->spillToDisk == false) {
Assert(TempFileControl->finishwrite == false); Assert(TempFileControl->finishwrite == false);
@ -2980,7 +2971,7 @@ FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleH
} }
/* estimate num of temp file */ /* estimate num of temp file */
int estsize = getPower2Num(4 * numGroups / TempFileControl->inmemoryRownum); int estsize = getPower2NextNum(4 * numGroups / TempFileControl->inmemoryRownum);
TempFileControl->filenum = Max(HASH_MIN_FILENUMBER, estsize); TempFileControl->filenum = Max(HASH_MIN_FILENUMBER, estsize);
TempFileControl->filenum = Min(TempFileControl->filenum, HASH_MAX_FILENUMBER); TempFileControl->filenum = Min(TempFileControl->filenum, HASH_MAX_FILENUMBER);
TempFileControl->filesource = TempFileControl->filesource =

View File

@ -279,9 +279,8 @@ extern long ExecGetMemCostAgg(Agg*);
extern void initialize_phase(AggState* aggstate, int newphase); extern void initialize_phase(AggState* aggstate, int newphase);
extern List* find_hash_columns(AggState* aggstate); extern List* find_hash_columns(AggState* aggstate);
extern uint32 ComputeHashValue(TupleHashTable hashtbl); extern uint32 ComputeHashValue(TupleHashTable hashtbl);
extern int getPower2Num(int num);
extern void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable, TupleTableSlot* hashslot, extern void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable, TupleTableSlot* hashslot,
int numGroups, bool isAgg, int planId, int dop, Instrumentation* intrument = NULL); int64 numGroups, bool isAgg, int planId, int dop, Instrumentation* intrument = NULL);
extern void ExecEarlyFreeAggregation(AggState* node); extern void ExecEarlyFreeAggregation(AggState* node);
extern void ExecReSetAgg(AggState* node); extern void ExecReSetAgg(AggState* node);

View File

@ -356,7 +356,7 @@ inline int getPower2LessNum(int num)
return i; return i;
} }
inline int getPower2NextNum(int num) inline int getPower2NextNum(int64 num)
{ {
int i = 1; int i = 1;
int count = 0; int count = 0;