aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-03-31 11:37:44 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-03-31 11:37:44 -0400
commit94c9152dc880a8b1d1223c885d6d56d33e417b57 (patch)
treebaaae56a8e877ff244517b5bb8aef2eac9741039
parent3ec8576a02b2b06aa214c8f3c2c3303c8a67639f (diff)
downloadpostgresql-94c9152dc880a8b1d1223c885d6d56d33e417b57.tar.gz
postgresql-94c9152dc880a8b1d1223c885d6d56d33e417b57.zip
Back-patch addition of stack overflow and interrupt checks for lquery.
Experimentation shows that it's not hard at all to drive the old implementation of "ltree ~ lquery" match to stack overflow, so throw in a check_stack_depth() call, as I just did in HEAD. I wasn't able to make it take a long time, because all the pathological cases I tried hit stack overflow first; but I bet there are some others that do take a long time, so add CHECK_FOR_INTERRUPTS() too. Discussion: https://postgr.es/m/CAP_rww=waX2Oo6q+MbMSiZ9ktdj6eaJj0cQzNu=Ry2cCDij5fw@mail.gmail.com
-rw-r--r--contrib/ltree/lquery_op.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/contrib/ltree/lquery_op.c b/contrib/ltree/lquery_op.c
index 62172d5ea14..7244296384d 100644
--- a/contrib/ltree/lquery_op.c
+++ b/contrib/ltree/lquery_op.c
@@ -8,6 +8,7 @@
#include <ctype.h>
#include "catalog/pg_collation.h"
+#include "miscadmin.h"
#include "utils/formatting.h"
#include "ltree.h"
@@ -165,6 +166,12 @@ checkCond(lquery_level *curq, int query_numlevel, ltree_level *curt, int tree_nu
lquery_level *prevq = NULL;
ltree_level *prevt = NULL;
+ /* Since this function recurses, it could be driven to stack overflow */
+ check_stack_depth();
+
+ /* Pathological patterns could take awhile, too */
+ CHECK_FOR_INTERRUPTS();
+
if (SomeStack.muse)
{
high_pos = SomeStack.high_pos;