diff options
-rw-r--r-- | string.c | 8 | ||||
-rw-r--r-- | test/ruby/test_string.rb | 2 |
2 files changed, 7 insertions, 3 deletions
@@ -10237,12 +10237,14 @@ rb_str_end_with(int argc, VALUE *argv, VALUE str) for (i=0; i<argc; i++) { VALUE tmp = argv[i]; + long slen, tlen; StringValue(tmp); enc = rb_enc_check(str, tmp); - if (RSTRING_LEN(str) < RSTRING_LEN(tmp)) continue; + if ((tlen = RSTRING_LEN(tmp)) == 0) return Qtrue; + if ((slen = RSTRING_LEN(str)) < tlen) continue; p = RSTRING_PTR(str); - e = p + RSTRING_LEN(str); - s = e - RSTRING_LEN(tmp); + e = p + slen; + s = e - tlen; if (rb_enc_left_char_head(p, s, e, enc) != s) continue; if (memcmp(s, RSTRING_PTR(tmp), RSTRING_LEN(tmp)) == 0) diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index 12e4b0fe2a..3f7c06e075 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -1180,6 +1180,8 @@ CODE assert_send([S("hello"), :end_with?, S("llo")]) assert_not_send([S("hello"), :end_with?, S("ll")]) assert_send([S("hello"), :end_with?, S("el"), S("lo")]) + assert_send([S("hello"), :end_with?, S("")]) + assert_not_send([S("hello"), :end_with?]) bug5536 = '[ruby-core:40623]' assert_raise(TypeError, bug5536) {S("str").end_with? :not_convertible_to_string} |