postgres.git / summary / log / commit / refs
commit b875ca09f3626e4002b5e70e00f99e4bc29c4d32
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri Oct 02 19:00:52 2015 +0000
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.
src/backend/utils/adt/like.c | 1 +
src/backend/utils/adt/like_match.c | 3 +++
2 files changed, 4 insertions(+)
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index b338f451c3d..84e74e84574 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -20,6 +20,7 @@
#include <ctype.h>
#include "mb/pg_wchar.h"
+#include "miscadmin.h"
#include "utils/builtins.h"
diff --git a/src/backend/utils/adt/like_match.c b/src/backend/utils/adt/like_match.c
index 4f762b85c33..0af0ddcf49d 100644
--- a/src/backend/utils/adt/like_match.c
+++ b/src/backend/utils/adt/like_match.c
@@ -82,6 +82,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
[parent: 54b116d83f82]