Commit 5ed89a40 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #399 from akuroda/array_first_fix

fix segmentation fault in Array#first
parents 919a8477 a2aa7e7f
......@@ -764,6 +764,9 @@ mrb_ary_first(mrb_state *mrb, mrb_value self)
if (mrb_get_args(mrb, "|i", &size) == 0) {
return (a->len > 0)? a->ptr[0]: mrb_nil_value();
}
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) {
......
......@@ -118,7 +118,24 @@ assert('Array#first', '15.2.12.5.13') do
a = []
b = [1,2,3]
a.first == nil and b.first == 1
e2 = nil
e3 = nil
begin
# this will cause an exception due to the wrong argument
[1,2,3].first(-1)
rescue => e1
e2 = e1
end
begin
# this will cause an exception due to the wrong argument
[1,2,3].first(1,2)
rescue => e1
e3 = e1
end
a.first == nil and b.first == 1 and b.first(0) == [] and
b.first(1) == [1] and b.first(4) == [1,2,3] and
e2.class == ArgumentError and e3.class == ArgumentError
end
assert('Array#index', '15.2.12.5.14') 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