From fc96552d26e1d5960bcd85fcba4e1631ba15042d Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Mon, 7 Jul 2003 07:07:16 +0000 Subject: [PATCH] Don't treat "[:" as the start of a named set if there's no ":]". --- lib/wildmatch.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/wildmatch.c b/lib/wildmatch.c index 8f7a5236..6bf74c7e 100644 --- a/lib/wildmatch.c +++ b/lib/wildmatch.c @@ -143,10 +143,18 @@ static int domatch(const unsigned char *p, const unsigned char *text) else if (ch == '[' && p[1] == ':') { unsigned const char *s = p += 2; int i; - while ((ch = *p) && (ch != ':' || p[1] != ']')) p++; + while ((ch = *p) && ch != ']') p++; if (!ch) return ABORT_ALL; - i = p - s; + i = p - s - 1; + if (i < 0 || p[-1] != ':') { + /* Didn't find ":]", so treat like a normal set. */ + p = s - 2; + ch = '['; + if (*text == ch) + matched = TRUE; + continue; + } if (CC_EQ(s,i, "alnum")) { if (ISALNUM(*text)) matched = TRUE; @@ -197,7 +205,6 @@ static int domatch(const unsigned char *p, const unsigned char *text) } else /* malformed [:class:] string */ return ABORT_ALL; - p++; ch = 0; /* This makes "prev" get set to 0. */ } else if (*text == ch) -- 2.34.1