summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-12-26 18:12:44 +0900
committerGitHub <[email protected]>2016-12-26 18:12:44 +0900
commit30d5424adfe881b3fba208f9673908f8d722fd9a (patch)
tree12b5d11aa44107886a21071e4d45a543410cf758 /src
parent000a3119ca152db12c6e36501b65e27a8be9a53e (diff)
parent5c1c002ac2983fef8ef3254e2d2f3e016918c3cd (diff)
downloadmruby-30d5424adfe881b3fba208f9673908f8d722fd9a.tar.gz
mruby-30d5424adfe881b3fba208f9673908f8d722fd9a.zip
Merge pull request #3365 from ksss/freeze
Fix segv when primitive value
Diffstat (limited to 'src')
-rw-r--r--src/kernel.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/kernel.c b/src/kernel.c
index a5166deb2..5e44d73b4 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -453,9 +453,23 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_obj_freeze(mrb_state *mrb, mrb_value self)
{
- struct RBasic *b = mrb_basic_ptr(self);
+ struct RBasic *b;
+
+ switch (mrb_type(self)) {
+ case MRB_TT_FALSE:
+ case MRB_TT_TRUE:
+ case MRB_TT_FIXNUM:
+ case MRB_TT_SYMBOL:
+ case MRB_TT_FLOAT:
+ return self;
+ default:
+ break;
+ }
- MRB_SET_FROZEN_FLAG(b);
+ b = mrb_basic_ptr(self);
+ if (!MRB_FROZEN_P(b)) {
+ MRB_SET_FROZEN_FLAG(b);
+ }
return self;
}