Skip to content

Commit 5c1c002

Browse files
committed
Fix segv when primitive value
Fix #3352
1 parent 000a311 commit 5c1c002

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/kernel.c

+16-2
Original file line numberDiff line numberDiff line change
@@ -453,9 +453,23 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
453453
static mrb_value
454454
mrb_obj_freeze(mrb_state *mrb, mrb_value self)
455455
{
456-
struct RBasic *b = mrb_basic_ptr(self);
456+
struct RBasic *b;
457+
458+
switch (mrb_type(self)) {
459+
case MRB_TT_FALSE:
460+
case MRB_TT_TRUE:
461+
case MRB_TT_FIXNUM:
462+
case MRB_TT_SYMBOL:
463+
case MRB_TT_FLOAT:
464+
return self;
465+
default:
466+
break;
467+
}
457468

458-
MRB_SET_FROZEN_FLAG(b);
469+
b = mrb_basic_ptr(self);
470+
if (!MRB_FROZEN_P(b)) {
471+
MRB_SET_FROZEN_FLAG(b);
472+
}
459473
return self;
460474
}
461475

test/t/kernel.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ def test_method; end
260260
assert('Kernel#freeze') do
261261
obj = Object.new
262262
assert_equal obj, obj.freeze
263+
assert_equal 0, 0.freeze
264+
assert_equal :a, :a.freeze
263265
end
264266

265267
assert('Kernel#global_variables', '15.3.1.3.14') do
@@ -620,4 +622,3 @@ def recurse(count, stop)
620622

621623
assert_equal 6, recurse(0, 5)
622624
end
623-

0 commit comments

Comments
 (0)