From ea285785b27eafba908630c774404c28e01b6de9 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 19 Apr 2023 14:39:10 +1000 Subject: regexp: fix check for termination in [[:class:]] Fixes #259 Signed-off-by: Steve Bennett --- jimregexp.c | 4 ++++ tests/regexp.test | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/jimregexp.c b/jimregexp.c index 49c04af..0b6ccf6 100644 --- a/jimregexp.c +++ b/jimregexp.c @@ -792,6 +792,10 @@ static int regatom(regex_t *preg, int *flagp) for (cc = 0; cc < CC_NUM; cc++) { n = strlen(character_class[cc]); if (strncmp(pattern, character_class[cc], n) == 0) { + if (pattern[n] != ']') { + preg->err = REG_ERR_UNMATCHED_BRACKET; + return 0; + } /* Found a character class */ pattern += n + 1; break; diff --git a/tests/regexp.test b/tests/regexp.test index 356fa66..2c91ac7 100644 --- a/tests/regexp.test +++ b/tests/regexp.test @@ -754,4 +754,8 @@ test reg-31.2 {scanner not reset in failed optional group} { regexp -inline {^(?:(-)(?:(\w[\w-]*)\|)?)?(\w[\w-]*)$} -debug } {-debug - {} debug} +test reg-31.2 {invalid digit check in class} -body { + regexp {[[:digit:\0]} 1 +} -returnCodes error -result {couldn't compile regular expression pattern: brackets [] not balanced} + testreport -- cgit v1.1