mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 05:21:27 +03:00
Check for interrupts and stack overflow during rule/view dumps.
Since ruleutils.c recurses, it could be driven to stack overflow by deeply nested constructs. Very large queries might also take long enough to deparse that a check for interrupts seems like a good idea. Stick appropriate tests into a couple of key places. Noted by Greg Stark. Back-patch to all supported branches.
This commit is contained in:
parent
e2558e016e
commit
920fbc1b43
@ -35,6 +35,7 @@
|
||||
#include "commands/tablespace.h"
|
||||
#include "executor/spi.h"
|
||||
#include "funcapi.h"
|
||||
#include "miscadmin.h"
|
||||
#include "nodes/makefuncs.h"
|
||||
#include "nodes/nodeFuncs.h"
|
||||
#include "optimizer/clauses.h"
|
||||
@ -2661,6 +2662,10 @@ get_query_def(Query *query, StringInfo buf, List *parentnamespace,
|
||||
deparse_context context;
|
||||
deparse_namespace dpns;
|
||||
|
||||
/* Guard against excessively long or deeply-nested queries */
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
check_stack_depth();
|
||||
|
||||
/*
|
||||
* Before we begin to examine the query, acquire locks on referenced
|
||||
* relations, and fix up deleted columns in JOIN RTEs. This ensures
|
||||
@ -3178,6 +3183,10 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
|
||||
StringInfo buf = context->buf;
|
||||
bool need_paren;
|
||||
|
||||
/* Guard against excessively long or deeply-nested queries */
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
check_stack_depth();
|
||||
|
||||
if (IsA(setOp, RangeTblRef))
|
||||
{
|
||||
RangeTblRef *rtr = (RangeTblRef *) setOp;
|
||||
@ -5001,6 +5010,10 @@ get_rule_expr(Node *node, deparse_context *context,
|
||||
if (node == NULL)
|
||||
return;
|
||||
|
||||
/* Guard against excessively long or deeply-nested queries */
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
check_stack_depth();
|
||||
|
||||
/*
|
||||
* Each level of get_rule_expr must emit an indivisible term
|
||||
* (parenthesized if necessary) to ensure result is reparsed into the same
|
||||
|
Loading…
x
Reference in New Issue
Block a user