Fix potential use-after-free for BEFORE UPDATE row triggers on non-core AMs.
authorAndres Freund <andres@anarazel.de>
Fri, 19 Apr 2019 00:53:54 +0000 (17:53 -0700)
committerAndres Freund <andres@anarazel.de>
Fri, 19 Apr 2019 00:53:54 +0000 (17:53 -0700)
commit75e03eabeaac8fd229b14f74de55d0e1470903c4
treee18a589b1382a6d5140f42169c151e90c7f3a6c8
parentbb385c4fb0f4eb33d2bc7e484061565ba51cc790
Fix potential use-after-free for BEFORE UPDATE row triggers on non-core AMs.

When such a trigger returns the old row version, it naturally get
stored in the slot for the trigger result. When a table AMs doesn't
store HeapTuples internally, ExecBRUpdateTriggers() frees the old row
version passed to triggers - but before this fix it might still be
referenced by the slot holding the new tuple.

Noticed when running the out-of-core zheap AM against the in-core
version of tableam.

Author: Andres Freund
src/backend/commands/trigger.c