From 15aba4592b5c2a190a8d97f52b23547537f259cb Mon Sep 17 00:00:00 2001
From: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
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 <jgdr@dalibo.com>
---
 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

