diff options
author | Steve Bennett <steveb@workware.net.au> | 2023-04-19 14:39:10 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2023-04-19 14:54:37 +1000 |
commit | ea285785b27eafba908630c774404c28e01b6de9 (patch) | |
tree | 5160d4e478a75097a5ad53db509e826210ce1454 | |
parent | b777ec0ab419677a4675b280dfe6d02fc2ad5da2 (diff) | |
download | jimtcl-ea285785b27eafba908630c774404c28e01b6de9.zip jimtcl-ea285785b27eafba908630c774404c28e01b6de9.tar.gz jimtcl-ea285785b27eafba908630c774404c28e01b6de9.tar.bz2 |
regexp: fix check for termination in [[:class:]]
Fixes #259
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-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 |