summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-19 11:11:26 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-08-19 11:11:26 +0900
commit9146d5c34fa58a9680c1d8b85e34244b3608887b (patch)
tree81507f5cbb2a6bd283d8084ea8447790922f72d2 /src/array.c
parent8b3298b2d699e7affbc326a1d67e9004e0e5c4ce (diff)
downloadmruby-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.c5
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);