1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-29 16:21:20 +03:00

relcache: Avoid memory leak on tables with no CHECK constraints

As complained about by Valgrind, in commit a379061a22a8 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:
Álvaro Herrera 2025-05-11 09:22:12 -04:00
parent 7b2ad43426
commit dc9a2d54fd
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE

View File

@ -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],