]> granicus.if.org Git - postgresql/commit
Check for stack overflow in transformSetOperationTree().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Nov 2012 00:56:10 +0000 (19:56 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Nov 2012 00:56:10 +0000 (19:56 -0500)
commit34f3b396a6554903007031b0541781b7ecdd6e4d
tree6a5b2a4553f36f0ee2711db8cc57501cbbde64c0
parentfa12cb7f0241c767a072c980d75780c9ec036e01
Check for stack overflow in transformSetOperationTree().

Since transformSetOperationTree() recurses, it can be driven to stack
overflow with enough UNION/INTERSECT/EXCEPT clauses in a query.  Add a
check to ensure it fails cleanly instead of crashing.  Per report from
Matthew Gerber (though it's not clear whether this is the only thing
going wrong for him).

Historical note: I think the reasoning behind not putting a check here in
the beginning was that the check in transformExpr() ought to be sufficient
to guard the whole parser.  However, because transformSetOperationTree()
recurses all the way to the bottom of the set-operation tree before doing
any analysis of the statement's expressions, that check doesn't save it.
src/backend/parser/analyze.c