Re: search_plan_tree(): handling of non-leaf CustomScanState nodes causes segfault
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
To: David Geier <david@swarm64.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Date: 2021-01-18T11:43:28Z
Lists: pgsql-hackers
On Mon, Jan 18, 2021 at 4:13 PM David Geier <david@swarm64.com> wrote: > > Hi hackers, > > While working with cursors that reference plans with CustomScanStates > nodes, I encountered a segfault which originates from > search_plan_tree(). The query plan is the result of a simple SELECT > statement into which I inject a Custom Scan node at the root to do some > post-processing before returning rows. This plan is referenced by a > second plan with a Tid Scan which originates from a query of the form > DELETE FROM foo WHERE CURRENT OF my_cursor; > > search_plan_tree() assumes that > CustomScanState::ScanState::ss_currentRelation is never NULL. In my > understanding that only holds for CustomScanState nodes which are at the > bottom of the plan and actually read from a relation. CustomScanState > nodes which are not at the bottom don't have ss_currentRelation set. I > believe for such nodes, instead search_plan_tree() should recurse into > CustomScanState::custom_ps. > > I attached a patch. Any thoughts? I don't have any comments about your patch as such, but ForeignScan is similar to CustomScan. ForeignScan also can leave ss_currentRelation NULL if it represents join between two foreign tables. So either ForeignScan has the same problem as CustomScan (it's just above CustomScan case in search_plan_tree()) or it's handling it in some other way. In the first case we may want to fix that too in the same manner (not necessarily in the same patch) and the in the later case CustomScan can handle it the same way. Said that, I didn't notice any field in ForeignScan which is parallel to custom_ps, so what you are proposing is still needed. -- Best Wishes, Ashutosh Bapat
Commits
-
Remove faulty support for MergeAppend plan with WHERE CURRENT OF.
- 0ab177bec1c5 9.5.25 landed
- fe8edbb8267a 9.6.21 landed
- fac54bd5e216 10.16 landed
- 794562d0770a 11.11 landed
- 6253159965d5 12.6 landed
- 188cd4f440ed 13.2 landed
- a0efda88a679 14.0 landed
-
Avoid crash with WHERE CURRENT OF and a custom scan plan.
- 33a46993f15a 9.5.25 landed
- ffbf1746354a 9.6.21 landed
- 5cd94de777e0 10.16 landed
- de622e677cfd 11.11 landed
- ba80489c66cf 12.6 landed
- f0f53195b51a 13.2 landed
- 60661bbf2dca 14.0 landed