From b4608406f17097508d4666ceacf8764a746efa3e Mon Sep 17 00:00:00 2001 From: naruse Date: Thu, 15 Jul 2010 06:55:42 +0000 Subject: [PATCH] * regexec.c (onig_search): don't skip non-ANYCHARs when .* fails to match. This causes to fail matching ANYCHAR_STAR with LOOK_BEHIND. This fix is workaround and disable the optimization. [ruby-dev:41851] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ regexec.c | 5 ----- test/ruby/test_regexp.rb | 5 +++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 79ffe6566f..92b3fcafc2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Jul 15 15:47:32 2010 NARUSE, Yui + + * regexec.c (onig_search): don't skip non-ANYCHARs when + .* fails to match. This causes to fail matching + ANYCHAR_STAR with LOOK_BEHIND. This fix is workaround + and disable the optimization. [ruby-dev:41851] + Thu Jul 15 06:11:29 2010 Aaron Patterson * lib/rdoc/markup/attribute_manager.rb: fixing ri output when special diff --git a/regexec.c b/regexec.c index 24422b1671..c78d8ea998 100644 --- a/regexec.c +++ b/regexec.c @@ -3636,11 +3636,6 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end, MATCH_AND_RETURN_CHECK(orig_range); prev = s; s += enclen(reg->enc, s, end); - - while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) { - prev = s; - s += enclen(reg->enc, s, end); - } } while (s < range); goto mismatch; } diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index 9fd948d6a1..9e850b902e 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -11,6 +11,11 @@ class TestRegexp < Test::Unit::TestCase $VERBOSE = @verbose end + def test_ruby_dev_999 + assert_match(/(?<=a).*b/, "aab") + assert_match(/(?<=\u3042).*b/, "\u3042ab") + end + def test_ruby_core_27247 assert_match(/(a){2}z/, "aaz") end