mirror of
https://github.com/postgres/postgres.git
synced 2025-06-20 15:22:23 +03:00
relcache: Avoid memory leak on tables with no CHECK constraints
As complained about by Valgrind, in commit a379061a22
I failed to
realize that I was causing rd_att->constr->check to become allocated
when no CHECK constraints exist; previously it'd remain NULL. (This was
my bug, not the mentioned commit author's). Fix by making the
allocation conditional, and set ->check to NULL if unallocated.
Reported-by: Yasir <yasir.hussain.shah@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/202505082025.57ijx3qrbx7u@alvherre.pgsql
This commit is contained in:
11
src/backend/utils/cache/relcache.c
vendored
11
src/backend/utils/cache/relcache.c
vendored
@ -4598,10 +4598,13 @@ CheckNNConstraintFetch(Relation relation)
|
||||
HeapTuple htup;
|
||||
int found = 0;
|
||||
|
||||
/* Allocate array with room for as many entries as expected */
|
||||
check = (ConstrCheck *)
|
||||
MemoryContextAllocZero(CacheMemoryContext,
|
||||
ncheck * sizeof(ConstrCheck));
|
||||
/* Allocate array with room for as many entries as expected, if needed */
|
||||
if (ncheck > 0)
|
||||
check = (ConstrCheck *)
|
||||
MemoryContextAllocZero(CacheMemoryContext,
|
||||
ncheck * sizeof(ConstrCheck));
|
||||
else
|
||||
check = NULL;
|
||||
|
||||
/* Search pg_constraint for relevant entries */
|
||||
ScanKeyInit(&skey[0],
|
||||
|
Reference in New Issue
Block a user