summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-06-07 16:17:00 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-06-07 16:17:00 +0900
commit55edae0226409de25e59922807cb09acb45731a2 (patch)
treef4bcc8c18214f59d73d4e430b86b0d45c2cf0914 /src/kernel.c
parentcfd0c93d7d9dad13e6677beb7b7bd822a7572f8d (diff)
downloadmruby-55edae0226409de25e59922807cb09acb45731a2.tar.gz
mruby-55edae0226409de25e59922807cb09acb45731a2.zip
Allow `Object#clone` to copy frozen status only; fix #4036
Copying all flags from the original object may overwrite the clone's flags e.g. the embedded flag.
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/kernel.c b/src/kernel.c
index f378004cb..bbe6e8bb7 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -348,7 +348,7 @@ mrb_obj_clone(mrb_state *mrb, mrb_value self)
mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)p->c);
clone = mrb_obj_value(p);
init_copy(mrb, clone, self);
- p->flags = mrb_obj_ptr(self)->flags;
+ p->flags |= mrb_obj_ptr(self)->flags & MRB_FLAG_IS_FROZEN;
return clone;
}