Check for stack overrun in standard_ProcessUtility().
authorTom Lane <[email protected]>
Mon, 15 Oct 2018 18:01:38 +0000 (14:01 -0400)
committerTom Lane <[email protected]>
Mon, 15 Oct 2018 18:01:38 +0000 (14:01 -0400)
ProcessUtility can recurse, and indeed can be driven to infinite
recursion, so it ought to have a check_stack_depth() call.  This
covers the reported bug (portal trying to execute itself) and a bunch
of other cases that could perhaps arise somewhere.

Per bug #15428 from Malthe Borch.  Back-patch to all supported branches.

Discussion: https://postgr.es/m/15428-b3c2915ec470b033@postgresql.org

src/backend/tcop/utility.c

index 5633d5046c2c412198ab6a396e47a1a096ec45a3..872c2e9ce5ab4a319c0a43928fc016f939efb4c5 100644 (file)
@@ -333,6 +333,9 @@ standard_ProcessUtility(Node *parsetree,
 {
    bool        isTopLevel = (context == PROCESS_UTILITY_TOPLEVEL);
 
+   /* This can recurse, so check for excessive recursion */
+   check_stack_depth();
+
    check_xact_readonly(parsetree);
 
    if (completionTag)