aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-09-08 17:00:29 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2019-09-08 17:00:53 -0400
commit69f883fef14a3fc5849126799278abcc43f40f56 (patch)
tree45b200f74ee4f327d6c27aa75ad5887a0b814dcd
parentd807200b4a73a100cb8f41ee2f3ff1e2507647b8 (diff)
downloadpostgresql-69f883fef14a3fc5849126799278abcc43f40f56.tar.gz
postgresql-69f883fef14a3fc5849126799278abcc43f40f56.zip
Fix RelationIdGetRelation calls that weren't bothering with error checks.
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.
-rw-r--r--src/backend/access/heap/heapam.c3
-rw-r--r--src/backend/replication/logical/reorderbuffer.c8
2 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 28f00158a60..8ebf86f6878 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -8128,6 +8128,9 @@ 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);
+
/* deform tuple, so we have fast access to columns */
heap_deform_tuple(tp, desc, values, nulls);
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 7da681154cd..9da04daca7e 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -1553,7 +1553,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,
@@ -1671,7 +1671,7 @@ ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid,
relation = RelationIdGetRelation(relid);
- if (relation == NULL)
+ if (!RelationIsValid(relation))
elog(ERROR, "could not open relation with OID %u", relid);
if (!RelationIsLogicallyLogged(relation))
@@ -3031,6 +3031,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? */