postgres.git / summary / log / commit / refs

commit    a192243c75be0f142f829b3e73548bc7cbd3b90d
Author:   Tomas Vondra <tomas.vondra@postgresql.org>
Date:     Sun Jan 23 01:49:41 2022 +0000

    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 edc4c481043..59e531b55d8 100644 --- a/src/backend/commands/statscmds.c +++ b/src/backend/commands/statscmds.c @@ -677,6 +677,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: 3839e29c58b4]