From fd710d7e9995679db80b7adf35bbda2cd4db90c6 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Wed, 9 Feb 2022 09:58:05 -0800 Subject: Fix Range#include? for beginless exclusive string ranges Previously, include? would return true for the end of the range, when it should return false because the range is exclusive. Research and Analysis by Victor Shepelev. Fixes [Bug #18577] --- range.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'range.c') diff --git a/range.c b/range.c index 2390c5d38c..27f681767f 100644 --- a/range.c +++ b/range.c @@ -1792,6 +1792,9 @@ range_include_internal(VALUE range, VALUE val, int string_use_cover) else if (NIL_P(beg)) { VALUE r = rb_funcall(val, id_cmp, 1, end); if (NIL_P(r)) return Qfalse; + if (RANGE_EXCL(range)) { + return RBOOL(rb_cmpint(r, val, end) < 0); + } return RBOOL(rb_cmpint(r, val, end) <= 0); } else if (NIL_P(end)) { -- cgit v1.2.1