From a7d8042774c4850f91947711f7a85067a2e7af01 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 5 May 2008 03:13:32 +0000 Subject: [PATCH] * array.c (rb_ary_slice_bang): should adjust length before making sub-array. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ array.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index 346d1e31e1..25a48602fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon May 5 12:12:11 2008 Yukihiro Matsumoto + + * array.c (rb_ary_slice_bang): should adjust length before making + sub-array. + Mon May 5 11:36:14 2008 Yukihiro Matsumoto * array.c (rb_ary_dup): should dupe corresponding information. diff --git a/array.c b/array.c index 3931798621..fcd030b593 100644 --- a/array.c +++ b/array.c @@ -1794,6 +1794,9 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary) pos = RARRAY_LEN(ary) + pos; if (pos < 0) return Qnil; } + if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < pos + len) { + len = RARRAY_LEN(ary) - pos; + } arg2 = rb_ary_new4(len, RARRAY_PTR(ary)+pos); RBASIC(arg2)->klass = rb_obj_class(ary); rb_ary_splice(ary, pos, len, Qundef); /* Qnil/rb_ary_new2(0) */