diff options
Diffstat (limited to 'src/backend/utils/adt/tsquery_util.c')
-rw-r--r-- | src/backend/utils/adt/tsquery_util.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/backend/utils/adt/tsquery_util.c b/src/backend/utils/adt/tsquery_util.c index e378661488b..60de44cc6f6 100644 --- a/src/backend/utils/adt/tsquery_util.c +++ b/src/backend/utils/adt/tsquery_util.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_util.c,v 1.2 2007/09/07 15:09:56 teodor Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_util.c,v 1.3 2007/09/07 15:35:10 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -22,6 +22,9 @@ QT2QTN(QueryItem * in, char *operand) { QTNode *node = (QTNode *) palloc0(sizeof(QTNode)); + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + node->valnode = in; if (in->type == QI_OPR) @@ -53,6 +56,9 @@ QTNFree(QTNode * in) if (!in) return; + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->valnode->type == QI_VAL && in->word && (in->flags & QTN_WORDFREE) != 0) pfree(in->word); @@ -79,6 +85,9 @@ QTNFree(QTNode * in) int QTNodeCompare(QTNode * an, QTNode * bn) { + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (an->valnode->type != bn->valnode->type) return (an->valnode->type > bn->valnode->type) ? -1 : 1; @@ -133,6 +142,9 @@ QTNSort(QTNode * in) { int i; + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->valnode->type != QI_OPR) return; @@ -165,6 +177,9 @@ QTNTernary(QTNode * in) { int i; + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->valnode->type != QI_OPR) return; @@ -205,6 +220,9 @@ QTNBinary(QTNode * in) { int i; + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->valnode->type != QI_OPR) return; @@ -244,6 +262,9 @@ QTNBinary(QTNode * in) static void cntsize(QTNode * in, int *sumlen, int *nnode) { + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + *nnode += 1; if (in->valnode->type == QI_OPR) { @@ -268,6 +289,9 @@ typedef struct static void fillQT(QTN2QTState *state, QTNode *in) { + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + if (in->valnode->type == QI_VAL) { memcpy(state->curitem, in->valnode, sizeof(QueryOperand)); @@ -325,7 +349,12 @@ QTN2QT(QTNode *in) QTNode * QTNCopy(QTNode *in) { - QTNode *out = (QTNode *) palloc(sizeof(QTNode)); + QTNode *out; + + /* since this function recurses, it could be driven to stack overflow. */ + check_stack_depth(); + + out = (QTNode *) palloc(sizeof(QTNode)); *out = *in; out->valnode = (QueryItem *) palloc(sizeof(QueryItem)); |