[COMMITTERS] pgsql: Fix corruption of tableElts list by MergeAttributes(). - Mailing list pgsql-committers

From Robert Haas
Subject [COMMITTERS] pgsql: Fix corruption of tableElts list by MergeAttributes().
Date
Msg-id E1dBnCZ-0000vw-Rq@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix corruption of tableElts list by MergeAttributes().

Since commit e7b3349a8ad7afaad565c573fbd65fb46af6abbe, MergeAttributes
destructively modifies the input List, to which the caller's
CreateStmt still points.  One may wonder whether this was already a
bug, but commit f0e44751d7175fa3394da2c8f85e3ceb3cdbfe63 made things
noticeably worse by adding additional destructive modifications so
that the caller's List might, in the case of creation a partitioned
table, no longer even be structurally valid.  Restore the status quo
ante by assigning the return value of MergeAttributes back to
stmt->tableElts in the caller.

In most of the places where DefineRelation is called, it doesn't
matter what stmt->tableElts points to here or whether it's valid or
not, because the caller doesn't use the statement for anything after
DefineRelation returns anyway.  However, ProcessUtilitySlow passes it
to EventTriggerCollectSimpleCommand, and that function tries to invoke
copyObject on it.  If any of the CreateStmt's substructure is invalid
at that point, undefined behavior will result.

One might wonder whether this whole area needs further revision -
perhaps DefineRelation() ought not to be destructively modifying the
caller-provided CreateStmt at all.  However, that would be a behavior
change for any event triggers using C code to inspect the CreateStmt,
so for now, just fix the crash.

Report by Amit Langote, who provided a somewhat different patch for it.

Discussion: http://postgr.es/m/bf6a39a7-100a-74bd-1156-3c16a1429d88@lab.ntt.co.jp

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ac8d7e1b834e252c9aa8d5750f70a86ca74228b8

Modified Files
--------------
src/backend/commands/tablecmds.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: [COMMITTERS] pgsql: Fix argument name differences
Next
From: Tom Lane
Date:
Subject: [COMMITTERS] pgsql: Fix misspelled struct tag.