aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-10-15 14:01:38 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2018-10-15 14:01:38 -0400
commitd48da369ab22a8326d4d3d2b05b574d581057193 (patch)
tree6f154ff2cabf10301c36e5383ab431a907cc292f /src/backend
parent5b75a4f8266a4f187a47929fed0582ee778c703f (diff)
downloadpostgresql-d48da369ab22a8326d4d3d2b05b574d581057193.tar.gz
postgresql-d48da369ab22a8326d4d3d2b05b574d581057193.zip
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
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/tcop/utility.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index ede1621d3ea..970c94ee805 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)