summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-04-18 17:30:33 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-04-18 17:30:33 +0900
commit54905e98cfeb9fcce3a79a3c3b86cc11e659dd42 (patch)
treeaa2ea61f3bd9d134e6e321464f0eb1a0f06e4fe5 /src/array.c
parent391e24210fdfb3c80c86b10c1421c984ac715a13 (diff)
downloadmruby-54905e98cfeb9fcce3a79a3c3b86cc11e659dd42.tar.gz
mruby-54905e98cfeb9fcce3a79a3c3b86cc11e659dd42.zip
`ary_dup()` should not use `ary_replace(); fix #4004
Otherwise the duplicated object may have shared entities that should not be modified in-line.
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/src/array.c b/src/array.c
index e039ba3b1..bfa6e5f06 100644
--- a/src/array.c
+++ b/src/array.c
@@ -684,11 +684,7 @@ mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val)
static struct RArray*
ary_dup(mrb_state *mrb, struct RArray *a)
{
- mrb_int len = ARY_LEN(a);
- struct RArray *d = ary_new_capa(mrb, len);
-
- ary_replace(mrb, d, a);
- return d;
+ return ary_new_from_values(mrb, ARY_LEN(a), ARY_PTR(a));
}
MRB_API mrb_value