Commit a192243c authored by Tomas Vondra's avatar Tomas Vondra

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
parent 3839e29c
...@@ -677,6 +677,8 @@ AlterStatistics(AlterStatsStmt *stmt) ...@@ -677,6 +677,8 @@ AlterStatistics(AlterStatsStmt *stmt)
rel = table_open(StatisticExtRelationId, RowExclusiveLock); rel = table_open(StatisticExtRelationId, RowExclusiveLock);
oldtup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(stxoid)); 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 */ /* Must be owner of the existing statistics object */
if (!pg_statistics_object_ownercheck(stxoid, GetUserId())) if (!pg_statistics_object_ownercheck(stxoid, GetUserId()))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment