logical decoding: beware of an unset specinsert change
authorAlvaro Herrera
Thu, 5 Jul 2018 21:42:37 +0000 (17:42 -0400)
committerAlvaro Herrera
Thu, 5 Jul 2018 21:42:37 +0000 (17:42 -0400)
Coverity complains that there is no protection in the code (at least in
non-assertion-enabled builds) against speculative insertion failing to
follow the expected protocol.  Add an elog(ERROR) for the case.

src/backend/replication/logical/reorderbuffer.c

index 478984376c2576d3c6ee4e3aca003b14b19edde8..47e669578f2a2109d0768552c19d577787a0506a 100644 (file)
@@ -1572,6 +1572,8 @@ ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid,
                     * use as a normal record. It'll be cleaned up at the end
                     * of INSERT processing.
                     */
+                   if (specinsert == NULL)
+                       elog(ERROR, "invalid ordering of speculative insertion changes");
                    Assert(specinsert->data.tp.oldtuple == NULL);
                    change = specinsert;
                    change->action = REORDER_BUFFER_CHANGE_INSERT;