pgsql: Fix two latent(?) bugs in equivclass.c.
От | Tom Lane |
---|---|
Тема | pgsql: Fix two latent(?) bugs in equivclass.c. |
Дата | |
Msg-id | E1kPU5k-0002Je-Iw@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix two latent(?) bugs in equivclass.c. get_eclass_for_sort_expr() computes expr_relids and nullable_relids early on, even though they won't be needed unless we make a new EquivalenceClass, which we often don't. Aside from the probably-minor inefficiency, there's a memory management problem: these bitmapsets will be built in the caller's context, leading to dangling pointers if that is shorter-lived than root->planner_cxt. This would be a live bug if get_eclass_for_sort_expr() could be called with create_it = true during GEQO join planning. So far as I can find, the core code never does that, but it's hard to be sure that no extensions do, especially since the comments make it clear that that's supposed to be a supported case. Fix by not computing these values until we've switched into planner_cxt to build the new EquivalenceClass. generate_join_implied_equalities() uses inner_rel->relids to look up relevant eclasses, but it ought to be using nominal_inner_relids. This is presently harmless because a child RelOptInfo will always have exactly the same eclass_indexes as its topmost parent; but that might not be true forever, and anyway it makes the code confusing. The first of these is old (introduced by me in f3b3b8d5b), so back-patch to all supported branches. The second only dates to v13, but we might as well back-patch it to keep the code looking similar across branches. Discussion: https://postgr.es/m/1508010.1601832581@sss.pgh.pa.us Branch ------ REL9_5_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/e3bd026fbb91c64e99c2a66eceb2dba3cc3ec6f0 Modified Files -------------- src/backend/optimizer/path/equivclass.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
В списке pgsql-committers по дате отправления: