Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitced138e

Browse files
committed
Fix use-after-free bug with event triggers in an extension script
ALTER TABLE commands in an extension script are added to an eventtrigger command list; but starting with commitb5810de they do so ina memory context that's too short-lived, so when execution ends and timecomes to use the entries, they've already been freed.(This would also be a problem with ALTER TABLE commands in amulti-command query string, but these serendipitously end inPortalContext -- which probably explains why it took so long for this tobe reported.)Fix by using the memory context specifically set for that, instead.Backpatch to 13, where the aforementioned commit appeared.Reported-by: Philippe BeaudoinAuthor: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>Discussion:https://postgr.es/m/20200902193715.6e0269d4@firost
1 parent10a5b35 commitced138e

File tree

7 files changed

+47
-2
lines changed

7 files changed

+47
-2
lines changed

‎src/backend/commands/event_trigger.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,9 +1646,15 @@ EventTriggerAlterTableEnd(void)
16461646
/* If no subcommands, don't collect */
16471647
if (list_length(currentEventTriggerState->currentCommand->d.alterTable.subcmds)!=0)
16481648
{
1649+
MemoryContextoldcxt;
1650+
1651+
oldcxt=MemoryContextSwitchTo(currentEventTriggerState->cxt);
1652+
16491653
currentEventTriggerState->commandList=
16501654
lappend(currentEventTriggerState->commandList,
16511655
currentEventTriggerState->currentCommand);
1656+
1657+
MemoryContextSwitchTo(oldcxt);
16521658
}
16531659
else
16541660
pfree(currentEventTriggerState->currentCommand);

‎src/test/modules/test_extensions/Makefile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ MODULE = test_extensions
44
PGFILEDESC = "test_extensions - regression testing for EXTENSION support"
55

66
EXTENSION = test_ext1 test_ext2 test_ext3 test_ext4 test_ext5 test_ext6\
7-
test_ext7 test_ext8 test_ext_cyclic1 test_ext_cyclic2
7+
test_ext7 test_ext8 test_ext_cyclic1 test_ext_cyclic2\
8+
test_ext_evttrig
89
DATA = test_ext1--1.0.sql test_ext2--1.0.sql test_ext3--1.0.sql\
910
test_ext4--1.0.sql test_ext5--1.0.sql test_ext6--1.0.sql\
1011
test_ext7--1.0.sql test_ext7--1.0--2.0.sql test_ext8--1.0.sql\
11-
test_ext_cyclic1--1.0.sql test_ext_cyclic2--1.0.sql
12+
test_ext_cyclic1--1.0.sql test_ext_cyclic2--1.0.sql\
13+
test_ext_evttrig--1.0.sql test_ext_evttrig--1.0--2.0.sql
1214

1315
REGRESS = test_extensions test_extdepend
1416

‎src/test/modules/test_extensions/expected/test_extensions.out

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,8 @@ DROP TABLE test_ext4_tab;
154154
DROP FUNCTION create_extension_with_temp_schema();
155155
RESET client_min_messages;
156156
\unset SHOW_CONTEXT
157+
-- Test case of an event trigger run in an extension upgrade script.
158+
-- See: https://postgr.es/m/20200902193715.6e0269d4@firost
159+
CREATE EXTENSION test_ext_evttrig;
160+
ALTER EXTENSION test_ext_evttrig UPDATE TO '2.0';
161+
DROP EXTENSION test_ext_evttrig;

‎src/test/modules/test_extensions/sql/test_extensions.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,9 @@ DROP TABLE test_ext4_tab;
9393
DROPFUNCTION create_extension_with_temp_schema();
9494
RESET client_min_messages;
9595
\unset SHOW_CONTEXT
96+
97+
-- Test case of an event trigger run in an extension upgrade script.
98+
-- See: https://postgr.es/m/20200902193715.6e0269d4@firost
99+
CREATE EXTENSION test_ext_evttrig;
100+
ALTER EXTENSION test_ext_evttrigUPDATE TO'2.0';
101+
DROP EXTENSION test_ext_evttrig;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/* src/test/modules/test_extensions/test_event_trigger--1.0--2.0.sql*/
2+
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
3+
\echo Use"ALTER EXTENSION test_event_trigger UPDATE TO '2.0'" to load this file. \quit
4+
5+
-- Test extension upgrade with event trigger.
6+
ALTER EVENT TRIGGER table_rewrite_trg DISABLE;
7+
ALTERTABLE t DROP COLUMN id;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/* src/test/modules/test_extensions/test_event_trigger--1.0.sql*/
2+
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
3+
\echo Use"CREATE EXTENSION test_event_trigger" to load this file. \quit
4+
5+
-- Base table with event trigger, used in a regression test involving
6+
-- extension upgrades.
7+
CREATETABLEt (idtext);
8+
CREATE OR REPLACEFUNCTION_evt_table_rewrite_fnct()
9+
RETURNS EVENT_TRIGGER LANGUAGE plpgsqlAS
10+
$$
11+
BEGIN
12+
END;
13+
$$;
14+
CREATE EVENT TRIGGER table_rewrite_trg
15+
ON table_rewrite
16+
EXECUTE PROCEDURE _evt_table_rewrite_fnct();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
comment = 'Test extension - event trigger'
2+
default_version = '1.0'
3+
relocatable = true

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp