summaryrefslogtreecommitdiff
path: root/range.c
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2022-09-04 09:44:59 +0200
committerJean Boussier <jean.boussier@gmail.com>2022-09-04 11:16:11 +0200
commitbbe5ec78463f8d6ef2e1a3571f17357a3d9ec8e4 (patch)
tree6fc194a3bd61c425629478d3ea6a7f99a0cabf55 /range.c
parentcfa40e225adb30b777ef50d9d8dc15a51e3d2797 (diff)
downloadruby-bbe5ec78463f8d6ef2e1a3571f17357a3d9ec8e4.tar.gz
rb_int_range_last: properly handle non-exclusive range
[Bug #18994]
Diffstat (limited to 'range.c')
-rw-r--r--range.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/range.c b/range.c
index 39786ed97c..b49b1bd79c 100644
--- a/range.c
+++ b/range.c
@@ -1107,10 +1107,6 @@ rb_int_range_last(int argc, VALUE *argv, VALUE range)
x = EXCL(range);
len_1 = rb_int_minus(e, b);
- if (FIXNUM_ZERO_P(len_1) || rb_num_negative_p(len_1)) {
- return rb_ary_new_capa(0);
- }
-
if (x) {
e = rb_int_minus(e, ONE);
len = len_1;
@@ -1119,6 +1115,10 @@ rb_int_range_last(int argc, VALUE *argv, VALUE range)
len = rb_int_plus(len_1, ONE);
}
+ if (FIXNUM_ZERO_P(len) || rb_num_negative_p(len)) {
+ return rb_ary_new_capa(0);
+ }
+
rb_scan_args(argc, argv, "1", &nv);
n = NUM2LONG(nv);
if (n < 0) {