From 15aba4592b5c2a190a8d97f52b23547537f259cb Mon Sep 17 00:00:00 2001 From: Jehan-Guillaume de Rorthais Date: Wed, 2 Sep 2020 19:23:55 +0200 Subject: [PATCH] Fix crash with alter table event triggers in extension Alter table commands in an extension script were adding their commands to the event trigger command list using their own memory context. As since b5810de3f4 each statement use a short living context memory, the command list and/or cells were free'd, leaving a dangling pointer in currentEventTriggerState->commandList. This raise the Assert when the list is later inspected by the top-level create/alter extension command. Reported-by: Philippe Beaudoin Author: Jehan-Guillaume de Rorthais --- src/backend/commands/event_trigger.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 7844880170..d477b14f50 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -1646,9 +1646,14 @@ EventTriggerAlterTableEnd(void) /* If no subcommands, don't collect */ if (list_length(currentEventTriggerState->currentCommand->d.alterTable.subcmds) != 0) { + MemoryContext oldcxt; + oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); + currentEventTriggerState->commandList = lappend(currentEventTriggerState->commandList, currentEventTriggerState->currentCommand); + + MemoryContextSwitchTo(oldcxt); } else pfree(currentEventTriggerState->currentCommand); -- 2.20.1