postgres.git / summary / log / commit / refs

commit    62148c3520b562e518f17134b22120bab0cb113b
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sun May 05 16:44:32 2019 +0000
First released in: 12.0, 11.3

    Add check for syscache lookup failure in update_relispartition().
    
    Omitted in commit 05b38c7e6 (though it looks like the original blame
    belongs to 9e9befac4).  A failure is admittedly unlikely, but if it
    did happen, SIGSEGV is not the approved method of reporting it.
    
    Per Coverity.  Back-patch to v11 where the broken code originated.


src/backend/commands/indexcmds.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index fabba3bacd1..26f3b2cd7a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -3451,10 +3451,11 @@ update_relispartition(Oid relationId, bool newval) classRel = table_open(RelationRelationId, RowExclusiveLock); tup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relationId)); + if (!HeapTupleIsValid(tup)) + elog(ERROR, "cache lookup failed for relation %u", relationId); Assert(((Form_pg_class) GETSTRUCT(tup))->relispartition != newval); ((Form_pg_class) GETSTRUCT(tup))->relispartition = newval; CatalogTupleUpdate(classRel, &tup->t_self, tup); heap_freetuple(tup); - table_close(classRel, RowExclusiveLock); } [parent: 84e4570da923]