mirror of
https://github.com/boostorg/regex.git
synced 2025-07-17 06:12:10 +02:00
Some lookbehind assertions were accepted when they should not have been.
Fixes #4309. [SVN r62563]
This commit is contained in:
@ -1039,6 +1039,14 @@ int basic_regex_creator<charT, traits>::calculate_backstep(re_syntax_base* state
|
|||||||
case syntax_element_jump:
|
case syntax_element_jump:
|
||||||
state = static_cast<re_jump*>(state)->alt.p;
|
state = static_cast<re_jump*>(state)->alt.p;
|
||||||
continue;
|
continue;
|
||||||
|
case syntax_element_alt:
|
||||||
|
{
|
||||||
|
int r1 = calculate_backstep(state->next.p);
|
||||||
|
int r2 = calculate_backstep(static_cast<re_alt*>(state)->alt.p);
|
||||||
|
if((r1 < 0) || (r1 != r2))
|
||||||
|
return -1;
|
||||||
|
return result + r1;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,8 @@ void test_conditionals()
|
|||||||
TEST_INVALID_REGEX("(?<!*|A)", perl);
|
TEST_INVALID_REGEX("(?<!*|A)", perl);
|
||||||
TEST_INVALID_REGEX("(?<=?|A)", perl);
|
TEST_INVALID_REGEX("(?<=?|A)", perl);
|
||||||
TEST_INVALID_REGEX("(?<=*|\\B)", perl);
|
TEST_INVALID_REGEX("(?<=*|\\B)", perl);
|
||||||
|
TEST_INVALID_REGEX("(?<!a|bc)de", perl);
|
||||||
|
TEST_INVALID_REGEX("(?<=a|bc)de", perl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_options()
|
void test_options()
|
||||||
@ -278,8 +280,8 @@ void test_options2()
|
|||||||
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaaacat", match_default, make_array(4, 7, -2, -2));
|
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaaacat", match_default, make_array(4, 7, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaacat", match_default, make_array(-2, -2));
|
TEST_REGEX_SEARCH("(?<=^[[:alpha:]]{4})(?:bar|cat)", perl, "aaacat", match_default, make_array(-2, -2));
|
||||||
|
|
||||||
TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2));
|
//TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2));
|
//TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "ZZZ", match_default, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "ZZZ", match_default, make_array(0, 3, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "zZZ", match_default, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "zZZ", match_default, make_array(0, 3, -2, -2));
|
||||||
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "bZZ", match_default, make_array(0, 3, -2, -2));
|
TEST_REGEX_SEARCH("(?:ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "bZZ", match_default, make_array(0, 3, -2, -2));
|
||||||
|
Reference in New Issue
Block a user