Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1b2a386

Browse files
committed
Add stack-overflow guards in set-operation planning.
create_plan_recurse lacked any stack depth check. This is not perour normal coding rules, but I'd supposed it was safe because earlierplanner processing is more complex and presumably should eat morestack. But bug #15033 from Andrew Grossman shows this isn't true,at least not for queries having the form of a many-thousand-wayINTERSECT stack.Further testing showed that recurse_set_operations is also capableof being crashed in this way, since it likewise will recurse to thebottom of a parsetree before calling any support functions thatmight themselves contain any stack checks. However, its stackconsumption is only perhaps a third of create_plan_recurse's.It's possible that this particular problem with create_plan_recurse canonly manifest in 9.6 and later, since before that we didn't build a Pathtree for set operations. But having seen this example, I now have nofaith in the proposition that create_plan_recurse doesn't need a stackcheck, so back-patch to all supported branches.Discussion:https://postgr.es/m/20180127050845.28812.58244@wrigleys.postgresql.org
1 parent76e117d commit1b2a386

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

‎src/backend/optimizer/plan/createplan.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,9 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
355355
{
356356
Plan*plan;
357357

358+
/* Guard against stack overflow due to overly complex plans */
359+
check_stack_depth();
360+
358361
switch (best_path->pathtype)
359362
{
360363
caseT_SeqScan:

‎src/backend/optimizer/prep/prepunion.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@ recurse_set_operations(Node *setOp, PlannerInfo *root,
252252
List**pTargetList,
253253
double*pNumGroups)
254254
{
255+
/* Guard against stack overflow due to overly complex setop nests */
256+
check_stack_depth();
257+
255258
if (IsA(setOp,RangeTblRef))
256259
{
257260
RangeTblRef*rtr= (RangeTblRef*)setOp;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp