From d69d98f61a9e58b03ae2d8c195f0f97e8c04080a Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 7 Mar 2017 09:13:41 +0000 Subject: string.c: negation of LONG_MIN * string.c (rb_str_update): do not use negation of LONG_MIN, which is negative too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 43b8b4e007..be74fd8b72 100644 --- a/string.c +++ b/string.c @@ -4435,12 +4435,14 @@ rb_str_update(VALUE str, long beg, long len, VALUE val) rb_raise(rb_eIndexError, "index %ld out of string", beg); } if (beg < 0) { - if (-beg > slen) { + if (beg + slen < 0) { goto out_of_range; } beg += slen; } - if (slen < len || slen < beg + len) { + assert(beg >= 0); + assert(beg <= slen); + if (len > slen - beg) { len = slen - beg; } str_modify_keep_cr(str); -- cgit v1.2.3