Skip to content

Commit 8b56928

Browse files
committed
Add a stack overflow check to copyObject().
There are some code paths, such as SPI_execute(), where we invoke copyObject() on raw parse trees before doing parse analysis on them. Since the bison grammar is capable of building heavily nested parsetrees while itself using only minimal stack depth, this means that copyObject() can be the front-line function that hits stack overflow before anything else does. Accordingly, it had better have a check_stack_depth() call. I did a bit of performance testing and found that this slows down copyObject() by only a few percent, so the hit ought to be negligible in the context of complete processing of a query. Per off-list report from Toshihide Katayama. Back-patch to all supported branches.
1 parent af1a614 commit 8b56928

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

src/backend/nodes/copyfuncs.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "postgres.h"
2424

25+
#include "miscadmin.h"
2526
#include "nodes/plannodes.h"
2627
#include "nodes/relation.h"
2728
#include "utils/datum.h"
@@ -3667,6 +3668,9 @@ copyObject(void *from)
36673668
if (from == NULL)
36683669
return NULL;
36693670

3671+
/* Guard against stack overflow due to overly complex expressions */
3672+
check_stack_depth();
3673+
36703674
switch (nodeTag(from))
36713675
{
36723676
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy