From db9034bf7653fa527e2531e1a713dbbd37066a6b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 15 Oct 2018 14:01:38 -0400 Subject: [PATCH] Check for stack overrun in standard_ProcessUtility(). 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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index b5804f64ad..ad3a68a79b 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -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)