aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2015-10-02 15:00:52 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2015-10-02 15:00:52 -0400
commitf80af01174fa1aafa97b9464f31db2b554d26f47 (patch)
treeccaf2666907dffa35510f39a19ac546e806401ad
parente7de1bc0979ad81789864e6c2d346a5c16f28ad2 (diff)
downloadpostgresql-f80af01174fa1aafa97b9464f31db2b554d26f47.tar.gz
postgresql-f80af01174fa1aafa97b9464f31db2b554d26f47.zip
Add recursion depth protection to LIKE matching.
Since MatchText() recurses, it could in principle be driven to stack overflow, although quite a long pattern would be needed.
-rw-r--r--src/backend/utils/adt/like.c1
-rw-r--r--src/backend/utils/adt/like_match.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index 3137711c384..2575c255011 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -21,6 +21,7 @@
#include "catalog/pg_collation.h"
#include "mb/pg_wchar.h"
+#include "miscadmin.h"
#include "utils/builtins.h"
#include "utils/pg_locale.h"
diff --git a/src/backend/utils/adt/like_match.c b/src/backend/utils/adt/like_match.c
index 214664116d7..0a650e957d8 100644
--- a/src/backend/utils/adt/like_match.c
+++ b/src/backend/utils/adt/like_match.c
@@ -83,6 +83,9 @@ MatchText(char *t, int tlen, char *p, int plen,
if (plen == 1 && *p == '%')
return LIKE_TRUE;
+ /* Since this function recurses, it could be driven to stack overflow */
+ check_stack_depth();
+
/*
* In this loop, we advance by char when matching wildcards (and thus on
* recursive entry to this function we are properly char-synced). On other