diff options
| author | Daniel Bovensiepen <[email protected]> | 2012-09-27 18:17:25 +0800 |
|---|---|---|
| committer | Daniel Bovensiepen <[email protected]> | 2012-09-27 18:17:25 +0800 |
| commit | 88dfaf19aa0808f78d13133d61ea433d043923f9 (patch) | |
| tree | e5cc8acde66e8be7338aa5bc09a0c73836644a68 /src/array.c | |
| parent | 5b2572362966bc8c82ca32c83871bd9c27ce1a2e (diff) | |
| parent | 5adbbe66d86de3959d2e8cb114c8be255459bb0a (diff) | |
| download | mruby-88dfaf19aa0808f78d13133d61ea433d043923f9.tar.gz mruby-88dfaf19aa0808f78d13133d61ea433d043923f9.zip | |
Merge remote-tracking branch 'upstream/master' into mrbgems
Diffstat (limited to 'src/array.c')
| -rw-r--r-- | src/array.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/array.c b/src/array.c index e55b104da..36f4af9c6 100644 --- a/src/array.c +++ b/src/array.c @@ -587,8 +587,7 @@ mrb_value mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_value rpl) { struct RArray *a = mrb_ary_ptr(ary); - mrb_int tail; - int size; + int tail, size; mrb_value *argv; int i, argc; @@ -600,6 +599,9 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val mrb_raise(mrb, E_INDEX_ERROR, "index is out of array"); } } + if (a->len < len || a->len < head + len) { + len = a->len - head; + } tail = head + len; /* size check */ @@ -614,7 +616,6 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val size = head + argc; if (tail < a->len) size += a->len - tail; - if (size > a->aux.capa) ary_expand_capa(mrb, a, size); |
