Skip to content

Commit 1a16b6f

Browse files
kyanagimame
authored andcommitted
Make Range#reverse_each raise TypeError if endless
1 parent 0164da6 commit 1a16b6f

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

range.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,11 @@ range_reverse_each(VALUE range)
11331133
VALUE end = RANGE_END(range);
11341134
int excl = EXCL(range);
11351135

1136+
if (NIL_P(end)) {
1137+
rb_raise(rb_eTypeError, "can't iterate from %s",
1138+
rb_obj_classname(end));
1139+
}
1140+
11361141
if (FIXNUM_P(beg) && FIXNUM_P(end)) {
11371142
if (excl) {
11381143
if (end == LONG2FIX(FIXNUM_MIN)) return range;

test/ruby/test_range.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,14 @@ def test_reverse_each_for_beginless_range
582582
assert_equal([fmin-2, fmin-3], a)
583583
end
584584

585+
def test_reverse_each_for_endless_range
586+
assert_raise(TypeError) { (1..).reverse_each {} }
587+
588+
enum = nil
589+
assert_nothing_raised { enum = (1..).reverse_each }
590+
assert_raise(TypeError) { enum.each {} }
591+
end
592+
585593
def test_reverse_each_for_single_point_range
586594
fmin = RbConfig::LIMITS['FIXNUM_MIN']
587595
fmax = RbConfig::LIMITS['FIXNUM_MAX']

0 commit comments

Comments
 (0)