diff --git a/regexec.c b/regexec.c index 2dcd4fc20ad..02e79bedf01 100644 --- a/regexec.c +++ b/regexec.c @@ -4284,6 +4284,7 @@ str_lower_case_match(OnigEncoding enc, int case_fold_flag, while (t < tend) { lowlen = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &p, end, lowbuf); + if (tend - t < lowlen) return 0; q = lowbuf; while (lowlen > 0) { if (*t++ != *q++) return 0; diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index 7196ad71c40..80169275576 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -1466,6 +1466,10 @@ class TestRegexp < Test::Unit::TestCase assert_match(/^\u00df$/i, "ss") #assert_match(/^(\u00df)\1$/i, "\u00dfss") # this must be bug... assert_match(/^\u00df{2}$/i, "\u00dfss") + assert_no_match(/s/i, "\u00df") + assert_no_match(/is/i, "i\u00df") + assert_no_match(/f/i, "\ufb03") + assert_match(/ss/i, "\u00df") assert_match(/^\u00c5$/i, "\u00c5") assert_match(/^\u00c5$/i, "\u00e5") assert_match(/^\u00c5$/i, "\u212b")