From 5c23f9cd9c16c605acdc36393e1a31e8c9b97a93 Mon Sep 17 00:00:00 2001 From: pgsql-guo Date: Wed, 24 Aug 2022 11:45:35 +0000 Subject: [PATCH v1] add check_stack_depth in more places --- src/backend/regex/regc_lex.c | 3 +++ src/backend/snowball/libstemmer/stem_UTF_8_turkish.c | 3 +++ src/backend/tsearch/spell.c | 4 ++++ src/backend/utils/adt/geo_ops.c | 3 +++ src/backend/utils/adt/like_support.c | 4 ++++ 5 files changed, 17 insertions(+) diff --git a/src/backend/regex/regc_lex.c b/src/backend/regex/regc_lex.c index 45727ffa01..1169e731a1 100644 --- a/src/backend/regex/regc_lex.c +++ b/src/backend/regex/regc_lex.c @@ -201,6 +201,9 @@ next(struct vars *v) { chr c; + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + /* errors yield an infinite sequence of failures */ if (ISERR()) return 0; /* the error has set nexttype to EOS */ diff --git a/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c b/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c index 3d04032787..9254574525 100644 --- a/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c +++ b/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c @@ -1,6 +1,7 @@ /* Generated by Snowball 2.2.0 - https://snowballstem.org/ */ #include "header.h" +#include "miscadmin.h" #ifdef __cplusplus extern "C" { @@ -1156,6 +1157,8 @@ lab0: } static int r_stem_suffix_chain_before_ki(struct SN_env * z) { + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); z->ket = z->c; { int ret = r_mark_ki(z); if (ret <= 0) return ret; diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index f07321b61d..edd2fbbd3a 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -63,6 +63,7 @@ #include "postgres.h" #include "catalog/pg_collation.h" +#include "miscadmin.h" #include "tsearch/dicts/spell.h" #include "tsearch/ts_locale.h" #include "utils/memutils.h" @@ -2400,6 +2401,9 @@ SplitToVariants(IspellDict *Conf, SPNode *snode, SplitVar *orig, char *word, int char *notprobed; int compoundflag = 0; + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + notprobed = (char *) palloc(wordlen); memset(notprobed, 1, wordlen); var = CopyVar(orig, 1); diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index b79705f8b3..535301a218 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -3833,6 +3833,9 @@ lseg_inside_poly(Point *a, Point *b, POLYGON *poly, int start) bool res = true, intersection = false; + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + t.p[0] = *a; t.p[1] = *b; s.p[0] = poly->p[(start == 0) ? (poly->npts - 1) : (start - 1)]; diff --git a/src/backend/utils/adt/like_support.c b/src/backend/utils/adt/like_support.c index 65a57fc3c4..2d3aaaaf6b 100644 --- a/src/backend/utils/adt/like_support.c +++ b/src/backend/utils/adt/like_support.c @@ -44,6 +44,7 @@ #include "catalog/pg_statistic.h" #include "catalog/pg_type.h" #include "mb/pg_wchar.h" +#include "miscadmin.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" #include "nodes/supportnodes.h" @@ -1364,6 +1365,9 @@ regex_selectivity_sub(const char *patt, int pattlen, bool case_insensitive) int paren_pos = 0; /* dummy init to keep compiler quiet */ int pos; + /* since this function recurses, it could be driven to stack overflow */ + check_stack_depth(); + for (pos = 0; pos < pattlen; pos++) { if (patt[pos] == '(') -- 2.25.1