aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2023-04-19 14:39:10 +1000
committerSteve Bennett <steveb@workware.net.au>2023-04-19 14:54:37 +1000
commitea285785b27eafba908630c774404c28e01b6de9 (patch)
tree5160d4e478a75097a5ad53db509e826210ce1454
parentb777ec0ab419677a4675b280dfe6d02fc2ad5da2 (diff)
downloadjimtcl-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.c4
-rw-r--r--tests/regexp.test4
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