diff --git a/range.c b/range.c index 96c059b806..c302b81a15 100644 --- a/range.c +++ b/range.c @@ -1946,10 +1946,13 @@ r_cover_range_p(VALUE range, VALUE beg, VALUE end, VALUE val) static VALUE r_cover_p(VALUE range, VALUE beg, VALUE end, VALUE val) { - if (NIL_P(beg) || r_less(beg, val) <= 0) { + int b_nil = 0, e_nil = 0; + if ((b_nil = NIL_P(beg)) || r_less(beg, val) <= 0) { int excl = EXCL(range); - if (NIL_P(end) || r_less(val, end) <= -excl) - return Qtrue; + if ((e_nil = NIL_P(end)) || r_less(val, end) <= -excl) + if(!(b_nil && e_nil)) { + return Qtrue; + } } return Qfalse; } diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index 8ac1930be6..e9cc62bc0c 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -546,7 +546,7 @@ def test_eqq_string assert_not_operator('A'..'Z', :===, 'ana') assert_operator('A'.., :===, 'ANA') assert_operator(..'Z', :===, 'ANA') - assert_operator(nil..nil, :===, 'ANA') + assert_not_operator(nil..nil, :===, 'ANA') end def test_eqq_time