]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Catch stack overflow when recursing in transformFromClauseItem().
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 13 Aug 2022 19:21:28 +0000 (15:21 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 13 Aug 2022 19:21:28 +0000 (15:21 -0400)
Most parts of the parser can expect that the stack overflow check
in transformExprRecurse() will trigger before things get desperate.
However, transformFromClauseItem() can recurse directly to self
without having analyzed any expressions, so it's possible to drive
it to a stack-overrun crash.  Add a check to prevent that.

Per bug #17583 from Egor Chindyaskin.  Back-patch to all supported
branches.

Richard Guo

Discussion: https://postgr.es/m/17583-33be55b9f981f75c@postgresql.org

src/backend/parser/parse_clause.c

index c655d188c765c8f45b9e8d5934c77dd33e713e54..02c2d6afa352122af9a568d63a793f7b8f6d04f6 100644 (file)
@@ -1056,6 +1056,9 @@ transformFromClauseItem(ParseState *pstate, Node *n,
                                                ParseNamespaceItem **top_nsitem,
                                                List **namespace)
 {
+       /* Guard against stack overflow due to overly deep subtree */
+       check_stack_depth();
+
        if (IsA(n, RangeVar))
        {
                /* Plain relation reference, or perhaps a CTE reference */