]> granicus.if.org Git - postgresql/commitdiff
Check for stack overrun in standard_ProcessUtility().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 15 Oct 2018 18:01:38 +0000 (14:01 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
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 ede1621d3ea8d21cf88416c6e8e1ad6f96e405c3..970c94ee805e0a4c64cdad247feb33afe0e20e9f 100644 (file)
@@ -387,6 +387,9 @@ standard_ProcessUtility(PlannedStmt *pstmt,
        bool            isAtomicContext = (!(context == PROCESS_UTILITY_TOPLEVEL || context == PROCESS_UTILITY_QUERY_NONATOMIC) || IsTransactionBlock());
        ParseState *pstate;
 
+       /* This can recurse, so check for excessive recursion */
+       check_stack_depth();
+
        check_xact_readonly(parsetree);
 
        if (completionTag)