postgres.git / summary / log / commit / refs
commit 6d554e3fcd6fb8be2dbcbd3521e2947ed7a552cb
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Sun Jan 23 01:49:41 2022 +0000
First released in: 15.0, 13.6, 14.2
Check syscache result in AlterStatistics
The syscache lookup may return NULL even for valid OID, for example due
to a concurrent DROP STATISTICS, so a HeapTupleIsValid is necessary.
Without it, it may fail with a segfault.
Reported by Alexander Lakhin, patch by me. Backpatch to 13, where ALTER
STATISTICS ... SET STATISTICS was introduced.
Backpatch-through: 13
Discussion: https://postgr.es/m/17372-bf3b6e947e35ae77%40postgresql.org
src/backend/commands/statscmds.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index f7419b8f562..54a190722df 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -657,6 +657,8 @@ AlterStatistics(AlterStatsStmt *stmt)
rel = table_open(StatisticExtRelationId, RowExclusiveLock);
oldtup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(stxoid));
+ if (!HeapTupleIsValid(oldtup))
+ elog(ERROR, "cache lookup failed for extended statistics object %u", stxoid);
/* Must be owner of the existing statistics object */
if (!pg_statistics_object_ownercheck(stxoid, GetUserId()))
[parent: 62e28097cebf]