pgsql: Avoid crash with WHERE CURRENT OF and a custom scan plan. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Avoid crash with WHERE CURRENT OF and a custom scan plan.
Date
Msg-id E1l1e1f-0004Cb-KA@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid crash with WHERE CURRENT OF and a custom scan plan.

execCurrent.c's search_plan_tree() assumed that ForeignScanStates
and CustomScanStates necessarily have a valid ss_currentRelation.
This is demonstrably untrue for postgres_fdw's remote join and
remote aggregation plans, and non-leaf custom scans might not have
an identifiable scan relation either.  Avoid crashing by ignoring
such nodes when the field is null.

This solution will lead to errors like 'cursor "foo" is not a
simply updatable scan of table "bar"' in cases where maybe we
could have allowed WHERE CURRENT OF to work.  That's not an issue
for postgres_fdw's usages, since joins or aggregations would render
WHERE CURRENT OF invalid anyway.  But an otherwise-transparent
upper level custom scan node might find this annoying.  When and if
someone cares to expend work on such a scenario, we could invent a
custom-scan-provider callback to determine what's safe.

Report and patch by David Geier, commentary by me.  It's been like
this for awhile, so back-patch to all supported branches.

Discussion: https://postgr.es/m/0253344d-9bdd-11c4-7f0d-d88c02cd7991@swarm64.com

Branch
------
REL9_6_STABLE

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

Modified Files
--------------
src/backend/executor/execCurrent.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Narrow the scope of a local variable.
Next
From: Bruce Momjian
Date:
Subject: pgsql: doc: adjust alignment of doc file list for "pg_waldump.sgml"