diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c index babc0d931..b8fec473b 100644 --- a/mrbgems/mruby-range-ext/src/range.c +++ b/mrbgems/mruby-range-ext/src/range.c @@ -111,7 +111,13 @@ range_size(mrb_state *mrb, mrb_value range) mrb_value beg = RANGE_BEG(r); mrb_value end = RANGE_END(r); - if ((mrb_integer_p(beg) || mrb_float_p(beg)) && mrb_nil_p(end)) { + if (mrb_float_p(beg)) { + mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from Float"); + } + if (mrb_nil_p(beg)) { + mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from nil"); + } + if (mrb_integer_p(beg) && mrb_nil_p(end)) { return mrb_float_value(mrb, INFINITY); } @@ -167,6 +173,9 @@ range_size(mrb_state *mrb, mrb_value range) mrb_value beg = RANGE_BEG(r); mrb_value end = RANGE_END(r); + if (mrb_nil_p(beg)) { + mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from nil"); + } if (mrb_integer_p(beg) && mrb_nil_p(end)) { return mrb_nil_value(); } diff --git a/mrbgems/mruby-range-ext/test/range.rb b/mrbgems/mruby-range-ext/test/range.rb index d37712926..96ced593e 100644 --- a/mrbgems/mruby-range-ext/test/range.rb +++ b/mrbgems/mruby-range-ext/test/range.rb @@ -55,13 +55,10 @@ assert('Range#size') do skip unless Object.const_defined?(:Float) assert_equal 6, (1...6.3).size assert_equal 5, (1...6.0).size - assert_equal 5, (1.1...6).size - assert_equal 15, (1.0..15.9).size assert_equal Float::INFINITY, (0..Float::INFINITY).size assert_equal Float::INFINITY, (1..).size assert_equal Float::INFINITY, (1...).size - assert_equal Float::INFINITY, (1.0..).size end assert('Range#max') do