Commit f322f7a0 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #550 from iij/pr-string-slice-boundary-error

fix the issue String#slice with Range may return broken String.
parents 1cd9d7e4 b1f5840a
...@@ -286,7 +286,7 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, ...@@ -286,7 +286,7 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp,
if (end > len) end = len; if (end > len) end = len;
} }
if (end < 0) end += len; if (end < 0) end += len;
if (!r->excl) end++; /* include end point */ if (!r->excl && end < len) end++; /* include end point */
len = end - beg; len = end - beg;
if (len < 0) len = 0; if (len < 0) len = 0;
......
...@@ -61,6 +61,32 @@ assert('String#[]', '15.2.10.5.6') do ...@@ -61,6 +61,32 @@ assert('String#[]', '15.2.10.5.6') do
a3 == 'bc' and b3 == nil a3 == 'bc' and b3 == nil
end end
assert('String#[] with Range') do
a1 = 'abc'[1..0]
b1 = 'abc'[1..1]
c1 = 'abc'[1..2]
d1 = 'abc'[1..3]
e1 = 'abc'[1..4]
f1 = 'abc'[0..-2]
g1 = 'abc'[-2..3]
h1 = 'abc'[3..4]
i1 = 'abc'[4..5]
a2 = 'abc'[1...0]
b2 = 'abc'[1...1]
c2 = 'abc'[1...2]
d2 = 'abc'[1...3]
e2 = 'abc'[1...4]
f2 = 'abc'[0...-2]
g2 = 'abc'[-2...3]
h2 = 'abc'[3...4]
i2 = 'abc'[4...5]
a1 == '' and b1 == 'b' and c1 == 'bc' and d1 == 'bc' and e1 == 'bc' and
f1 == 'ab' and g1 == 'bc' and h1 == '' and i2 == nil and
a2 == '' and b2 == '' and c2 == 'b' and d2 == 'bc' and e2 == 'bc' and
f2 == 'a' and g2 == 'bc' and h2 == '' and i2 == nil
end
assert('String#capitalize', '15.2.10.5.7') do assert('String#capitalize', '15.2.10.5.7') do
a = 'abc' a = 'abc'
a.capitalize a.capitalize
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment