]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix RelationIdGetRelation calls that weren't bothering with error checks.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Sep 2019 21:00:29 +0000 (17:00 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Sep 2019 21:00:57 +0000 (17:00 -0400)
Some of these are quite old, but that doesn't make them not bugs.
We'd rather report a failure via elog than SIGSEGV.

While at it, uniformly spell the error check as !RelationIsValid(rel)
rather than a bare rel == NULL test.  The machine code is the same
but it seems better to be consistent.

Coverity complained about this today, not sure why, because the
mistake is in fact old.

src/backend/access/heap/heapam.c
src/backend/replication/logical/reorderbuffer.c

index 784856ecf2cbdde1df13efb004ff8023d5cd504d..9554704456c92170acf282e523888c4851dc1dab 100644 (file)
@@ -7541,6 +7541,10 @@ ExtractReplicaIdentity(Relation relation, HeapTuple tp, bool key_changed, bool *
        }
 
        idx_rel = RelationIdGetRelation(replidindex);
+
+       if (!RelationIsValid(idx_rel))
+               elog(ERROR, "could not open relation with OID %u", replidindex);
+
        idx_desc = RelationGetDescr(idx_rel);
 
        /* deform tuple, so we have fast access to columns */
index dc4e37b9c32eb858f758b3e84f187db53e004299..afe3d53d844eae6577640f0e7658703e94753b2c 100644 (file)
@@ -1554,7 +1554,7 @@ ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid,
 
                                        relation = RelationIdGetRelation(reloid);
 
-                                       if (relation == NULL)
+                                       if (!RelationIsValid(relation))
                                                elog(ERROR, "could not open relation with OID %u (for filenode \"%s\")",
                                                         reloid,
                                                         relpathperm(change->data.tp.relnode,
@@ -2882,6 +2882,10 @@ ReorderBufferToastReplace(ReorderBuffer *rb, ReorderBufferTXN *txn,
        desc = RelationGetDescr(relation);
 
        toast_rel = RelationIdGetRelation(relation->rd_rel->reltoastrelid);
+       if (!RelationIsValid(toast_rel))
+               elog(ERROR, "could not open relation with OID %u",
+                        relation->rd_rel->reltoastrelid);
+
        toast_desc = RelationGetDescr(toast_rel);
 
        /* should we allocate from stack instead? */