diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2015-10-02 15:00:52 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2015-10-02 15:00:52 -0400 |
commit | bb1d979612706655bd8be1ea54beadeee5bade85 (patch) | |
tree | 4f80de92c75fd92574c1bb936866461733d8f468 | |
parent | c5e38b93c62fa360bb054c41a864ab45d9eccea0 (diff) | |
download | postgresql-bb1d979612706655bd8be1ea54beadeee5bade85.tar.gz postgresql-bb1d979612706655bd8be1ea54beadeee5bade85.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.c | 1 | ||||
-rw-r--r-- | src/backend/utils/adt/like_match.c | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index bcd9e2182d0..23c6d7b8cec 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 1e5e00a468d..e0d11ddf884 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 |