diff options
author | K.Kosako <kosako@sofnec.co.jp> | 2020-01-17 15:59:53 +0900 |
---|---|---|
committer | K.Kosako <kosako@sofnec.co.jp> | 2020-01-17 15:59:53 +0900 |
commit | 6e0a3da2ff872aa997afcb14e72df0f5d8213371 (patch) | |
tree | a2c6b727f9fcf8e80e8ce341a69221a1ab65c34e | |
parent | bd118e1a3396a9b7579a6f0d4bb7eb33b32806c0 (diff) | |
download | oniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.zip oniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.tar.gz oniguruma-6e0a3da2ff872aa997afcb14e72df0f5d8213371.tar.bz2 |
add ONIG_SYN_VARIABLE_LEN_LOOK_BEHIND
-rw-r--r-- | src/oniguruma.h | 3 | ||||
-rw-r--r-- | src/regcomp.c | 10 |
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; + } } } } |