Commit f114e3e2 authored by Akira Kuroda's avatar Akira Kuroda

fix segmentation fault in Array#last

parent c9813490
......@@ -789,6 +789,9 @@ mrb_ary_last(mrb_state *mrb, mrb_value self)
/* len == 1 */
size = mrb_fixnum(*vals);
if (size < 0) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "negative array size");
}
if (size > a->len) size = a->len;
if ((a->flags & MRB_ARY_SHARED) || size > ARY_DEFAULT_LEN) {
return ary_subseq(mrb, a, a->len - size, size);
......
......@@ -152,7 +152,15 @@ end
assert('Array#last', '15.2.12.5.18') do
a = [1,2,3]
a.last == 3 and [].last == nil
e2 = nil
begin
# this will cause an exception due to the wrong argument
[1,2,3].last(-1)
rescue => e1
e2 = e1
end
a.last == 3 and [].last == nil and e2.class == ArgumentError
end
assert('Array#length', '15.2.12.5.19') do
......
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