Fix [Bug #20246]: Don't set next_head_exact if a capture is called (#9897)

This commit is contained in:
Hiroya Fujinami 2024-02-13 09:53:03 +09:00 коммит произвёл GitHub
Родитель 8a345860d3
Коммит 4a6384ed93
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 6 добавлений и 1 удалений

Просмотреть файл

@ -3395,7 +3395,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
}
else if (type == NT_ENCLOSE) {
EncloseNode* en = NENCLOSE(node);
if (en->type == ENCLOSE_MEMORY) {
if (en->type == ENCLOSE_MEMORY && !IS_ENCLOSE_CALLED(en)) {
node = en->target;
goto retry;
}

Просмотреть файл

@ -2045,6 +2045,11 @@ class TestRegexp < Test::Unit::TestCase
100.times.each { assert(regex.match?(string)) }
end
def test_bug_20246 # [Bug #20246]
assert_equal '1.2.3', '1.2.3'[/(\d+)(\.\g<1>){2}/]
assert_equal '1.2.3', '1.2.3'[/((?:\d|foo|bar)+)(\.\g<1>){2}/]
end
def test_linear_time_p
assert_send [Regexp, :linear_time?, /a/]
assert_send [Regexp, :linear_time?, 'a']