aboutsummaryrefslogtreecommitdiff
path: root/src/regparse.c
diff options
context:
space:
mode:
authorK.Kosako <kkosako0@gmail.com>2024-06-05 22:43:24 +0900
committerK.Kosako <kkosako0@gmail.com>2024-06-05 22:43:24 +0900
commit2c747f537fbf2d44d5fab7f93c4b4ece9a4c883e (patch)
treefd5a88b648bc5f17905cf048d08601acaddc13ca /src/regparse.c
parent1b375923dd74367f3ebb58e2ee4dd95ccf7218fc (diff)
downloadoniguruma-2c747f537fbf2d44d5fab7f93c4b4ece9a4c883e.zip
oniguruma-2c747f537fbf2d44d5fab7f93c4b4ece9a4c883e.tar.gz
oniguruma-2c747f537fbf2d44d5fab7f93c4b4ece9a4c883e.tar.bz2
add new behavior ONIG_SYN_ALLOW_CHAR_TYPE_FOLLOWED_BY_MINUS_IN_CC (#298)
Diffstat (limited to 'src/regparse.c')
-rw-r--r--src/regparse.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/regparse.c b/src/regparse.c
index 3f764cb..36b6dd1 100644
--- a/src/regparse.c
+++ b/src/regparse.c
@@ -7092,11 +7092,16 @@ prs_cc(Node** np, PToken* tok, UChar** src, UChar* end, ParseEnv* env)
goto val_entry;
}
else if (r == TK_CC_AND) {
+ range_end_val_with_warning:
CC_ESC_WARN(env, (UChar* )"-");
goto range_end_val;
}
if (curr_type == CV_CPROP) {
+ if (IS_SYNTAX_BV(env->syntax,
+ ONIG_SYN_ALLOW_CHAR_TYPE_FOLLOWED_BY_MINUS_IN_CC)) {
+ goto range_end_val_with_warning;
+ }
r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
goto err;
}
@@ -7127,16 +7132,16 @@ prs_cc(Node** np, PToken* tok, UChar** src, UChar* end, ParseEnv* env)
if (r < 0) goto err;
fetched = 1;
- if (r == TK_CC_CLOSE)
+ if (r == TK_CC_CLOSE) {
goto range_end_val; /* allow [a-b-] */
+ }
else if (r == TK_CC_AND) {
- CC_ESC_WARN(env, (UChar* )"-");
- goto range_end_val;
+ goto range_end_val_with_warning;
}
if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {
- CC_ESC_WARN(env, (UChar* )"-");
- goto range_end_val; /* [0-9-a] is allowed as [0-9\-a] */
+ /* [0-9-a] is allowed as [0-9\-a] */
+ goto range_end_val_with_warning;
}
r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
goto err;