From 996f793d5470b73c946af6f61dce6ff37a3d2890 Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Thu, 27 Oct 2016 17:18:53 +0300 Subject: [PATCH] Copy raw_parse_tree before using it Address citusdata/citus#922. Fixes a segfault in PG's installcheck caused by our reuse of raw_parse_tree when handling EXPLAIN EXECUTE. --- src/backend/distributed/executor/multi_utility.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/executor/multi_utility.c b/src/backend/distributed/executor/multi_utility.c index 890b8f992..8f4917459 100644 --- a/src/backend/distributed/executor/multi_utility.c +++ b/src/backend/distributed/executor/multi_utility.c @@ -313,6 +313,7 @@ multi_ProcessUtility(Node *parsetree, ExecuteStmt *execstmt = (ExecuteStmt *) query->utilityStmt; PreparedStatement *entry = FetchPreparedStatement(execstmt->name, true); CachedPlanSource *plansource = entry->plansource; + Node *parseTreeCopy; Query *originalQuery; /* copied from ExplainExecuteQuery, will never trigger if you used PREPARE */ @@ -322,7 +323,9 @@ multi_ProcessUtility(Node *parsetree, " cached plans"))); } - originalQuery = parse_analyze(plansource->raw_parse_tree, + parseTreeCopy = copyObject(plansource->raw_parse_tree); + + originalQuery = parse_analyze(parseTreeCopy, plansource->query_string, plansource->param_types, plansource->num_params);