diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-19 11:11:26 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-19 11:11:26 +0900 |
| commit | 9146d5c34fa58a9680c1d8b85e34244b3608887b (patch) | |
| tree | 81507f5cbb2a6bd283d8084ea8447790922f72d2 /src/array.c | |
| parent | 8b3298b2d699e7affbc326a1d67e9004e0e5c4ce (diff) | |
| download | mruby-9146d5c34fa58a9680c1d8b85e34244b3608887b.tar.gz mruby-9146d5c34fa58a9680c1d8b85e34244b3608887b.zip | |
Zero width `unshift` should not touch memory; ref #3780
Diffstat (limited to 'src/array.c')
| -rw-r--r-- | src/array.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/array.c b/src/array.c index cec08b351..be6744724 100644 --- a/src/array.c +++ b/src/array.c @@ -562,6 +562,10 @@ mrb_ary_unshift_m(mrb_state *mrb, mrb_value self) mrb_int alen, len; mrb_get_args(mrb, "*!", &vals, &alen); + if (alen == 0) { + ary_modify_check(mrb, a); + return self; + } len = ARY_LEN(a); if (alen > ARY_MAX_SIZE - len) { mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big"); @@ -575,7 +579,6 @@ mrb_ary_unshift_m(mrb_state *mrb, mrb_value self) } else { ary_modify(mrb, a); - if (alen == 0) return self; if (ARY_CAPA(a) < len + alen) ary_expand_capa(mrb, a, len + alen); ptr = ARY_PTR(a); |
