diff --git a/src/string.c b/src/string.c index de8a671ac..b29a298c1 100644 --- a/src/string.c +++ b/src/string.c @@ -2956,7 +2956,7 @@ str_bytesplice(mrb_state *mrb, mrb_value str, mrb_int idx1, mrb_int len1, mrb_va if (RSTRING_LEN(replace) <= idx2+len2) { len2 = RSTRING_LEN(replace) - idx2; } - if (len2 == 0) return replace; + if (len2 == 0) return str; mrb_str_modify(mrb, s); if (len1 >= len2) { memmove(RSTR_PTR(s)+idx1, RSTRING_PTR(replace)+idx2, len2); @@ -2971,7 +2971,7 @@ str_bytesplice(mrb_state *mrb, mrb_value str, mrb_int idx1, mrb_int len1, mrb_va memmove(RSTR_PTR(s)+idx1+len2, RSTR_PTR(s)+idx1+len1, slen-(idx1+len1)); memmove(RSTR_PTR(s)+idx1, RSTRING_PTR(replace)+idx2, len2); } - return replace; + return str; } /* diff --git a/test/t/string.rb b/test/t/string.rb index 892899346..caba51b7c 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -902,62 +902,50 @@ end assert('String#bytesplice') do # range, replace (len1=len2) a = "0123456789" - assert_equal "ab", a.bytesplice(1..2, "ab") - assert_equal "0ab3456789", a + assert_equal "0ab3456789", a.bytesplice(1..2, "ab") # range, replace (len1>len2) a = "0123456789" - assert_equal "ab", a.bytesplice(1..3, "ab") - assert_equal "0ab456789", a + assert_equal "0ab456789", a.bytesplice(1..3, "ab") # range, replace (len1len2) a = "0123456789" - assert_equal "ab", a.bytesplice(1, 3, "ab") - assert_equal "0ab456789", a + assert_equal "0ab456789", a.bytesplice(1, 3, "ab") # idx, len, replace (len1len2) a = "0123456789" - assert_equal b, a.bytesplice(1..3, b, 1..2) - assert_equal "0bc456789", a + assert_equal "0bc456789", a.bytesplice(1..3, b, 1..2) # range, replace, range (len1len2) a = "0123456789" - assert_equal b, a.bytesplice(1, 3, b, 1, 2) - assert_equal "0bc456789", a + assert_equal "0bc456789", a.bytesplice(1, 3, b, 1, 2) # idx, len, replace, idx, len (len1