• Tom Lane's avatar
    Avoid crash with WHERE CURRENT OF and a custom scan plan. · 60661bbf
    Tom Lane authored
    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
    60661bbf
execCurrent.c 12.1 KB