diff options
-rw-r--r-- | jimregexp.c | 4 | ||||
-rw-r--r-- | tests/regexp.test | 4 |
2 files changed, 8 insertions, 0 deletions
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 |