diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-03-31 11:37:44 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-03-31 11:37:44 -0400 |
commit | fade4d4dffca760252c0d7ee69598e7b441ed2f4 (patch) | |
tree | 6f2525165544a11a1a8646553465b6912939bc30 | |
parent | 4bc3a16677be061e60abd8d9e732c434784566db (diff) | |
download | postgresql-fade4d4dffca760252c0d7ee69598e7b441ed2f4.tar.gz postgresql-fade4d4dffca760252c0d7ee69598e7b441ed2f4.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.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/contrib/ltree/lquery_op.c b/contrib/ltree/lquery_op.c index b6d2deb1af4..15dab680c8b 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; |