]> granicus.if.org Git - postgresql/commitdiff
Add recursion depth protection to LIKE matching.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 2 Oct 2015 19:00:52 +0000 (15:00 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 2 Oct 2015 19:00:52 +0000 (15:00 -0400)
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
src/backend/utils/adt/like_match.c

index 6e2aa9a86dc86fdda76be271104b91890eb390ea..845931d998df7e332f94917fc02c91e4be1dea54 100644 (file)
@@ -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"
 
index fcd36f09ee1826c701121b0250c3854f39e4cecb..89814a4b56cf89666500449d58a8956a58d99de6 100644 (file)
@@ -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