aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorK.Kosako <kosako@sofnec.co.jp>2020-01-17 15:59:53 +0900
committerK.Kosako <kosako@sofnec.co.jp>2020-01-17 15:59:53 +0900
commit6e0a3da2ff872aa997afcb14e72df0f5d8213371 (patch)
treea2c6b727f9fcf8e80e8ce341a69221a1ab65c34e
parentbd118e1a3396a9b7579a6f0d4bb7eb33b32806c0 (diff)
downloadoniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.zip
oniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.tar.gz
oniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.tar.bz2
add ONIG_SYN_VARIABLE_LEN_LOOK_BEHIND
-rw-r--r--src/oniguruma.h3
-rw-r--r--src/regcomp.c10
2 files changed, 10 insertions, 3 deletions
diff --git a/src/oniguruma.h b/src/oniguruma.h
index ed57b1a..e7481ec 100644
--- a/src/oniguruma.h
+++ b/src/oniguruma.h
@@ -4,7 +4,7 @@
oniguruma.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2019 K.Kosako
+ * Copyright (c) 2002-2020 K.Kosako
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -520,6 +520,7 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?<x>)(?<x>) */
#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */
#define ONIG_SYN_ISOLATED_OPTION_CONTINUE_BRANCH (1U<<10) /* ..(?i)...|... */
+#define ONIG_SYN_VARIABLE_LEN_LOOK_BEHIND (1U<<11) /* (?<=a+|..) */
/* syntax (behavior) in char class [...] */
#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */
diff --git a/src/regcomp.c b/src/regcomp.c
index 557f36d..f341904 100644
--- a/src/regcomp.c
+++ b/src/regcomp.c
@@ -4324,8 +4324,14 @@ tune_look_behind(Node* node, regex_t* reg, int state, ScanEnv* env)
r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
}
else {
- an->char_min_len = ci.min;
- an->char_max_len = ci.max;
+ if (ci.min != ci.max &&
+ ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_VARIABLE_LEN_LOOK_BEHIND)) {
+ r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
+ }
+ else {
+ an->char_min_len = ci.min;
+ an->char_max_len = ci.max;
+ }
}
}
}