Commit 92f87182 authored by Tom Lane's avatar Tom Lane

Guard against core dump from uninitialized subplan.

If the planner erroneously puts a non-parallel-safe SubPlan into
a parallelized portion of the query tree, nodeSubplan.c will fail
in the worker processes because it finds a null in es_subplanstates,
which it's unable to cope with.  It seems worth a test-and-elog to
make that an error case rather than a core dump case.

This probably should have been included in commit 16ebab68, which
was responsible for allowing nulls to appear in es_subplanstates
to begin with.  So, back-patch to v10 where that came in.

Discussion: https://postgr.es/m/924226.1604422326@sss.pgh.pa.us
parent 17fb6038
......@@ -797,7 +797,15 @@ ExecInitSubPlan(SubPlan *subplan, PlanState *parent)
sstate->planstate = (PlanState *) list_nth(estate->es_subplanstates,
subplan->plan_id - 1);
/* ... and to its parent's state */
/*
* This check can fail if the planner mistakenly puts a parallel-unsafe
* subplan into a parallelized subquery; see ExecSerializePlan.
*/
if (sstate->planstate == NULL)
elog(ERROR, "subplan \"%s\" was not initialized",
subplan->plan_name);
/* Link to parent's state, too */
sstate->parent = parent;
/* Initialize subexpressions */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment