aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gc.c10
-rw-r--r--test/ruby/test_gc.rb5
2 files changed, 11 insertions, 4 deletions
diff --git a/gc.c b/gc.c
index 3b9721e9d3..fb7008bacd 100644
--- a/gc.c
+++ b/gc.c
@@ -5325,8 +5325,9 @@ gc_info_decode(int flags, VALUE hash_or_key)
SET(immediate_sweep, (flags & GPR_FLAG_IMMEDIATE_SWEEP) ? Qtrue : Qfalse);
#undef SET
- if (key != Qnil) /* matched key should return above */
- rb_raise(rb_eArgError, "unknown key: %s", RSTRING_PTR(rb_id2str(SYM2ID(key))));
+ if (!NIL_P(key)) {/* matched key should return above */
+ rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
+ }
return hash;
}
@@ -5486,8 +5487,9 @@ gc_stat_internal(VALUE hash_or_sym, size_t *out)
#endif /* USE_RGENGC */
#undef SET
- if (key != Qnil) /* matched key should return above */
- rb_raise(rb_eArgError, "unknown key: %s", RSTRING_PTR(rb_id2str(SYM2ID(key))));
+ if (!NIL_P(key)) { /* matched key should return above */
+ rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
+ }
#if defined(RGENGC_PROFILE) && RGENGC_PROFILE >= 2
if (hash != Qnil) {
diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb
index 0c8ff62cae..b1933edb56 100644
--- a/test/ruby/test_gc.rb
+++ b/test/ruby/test_gc.rb
@@ -95,6 +95,10 @@ class TestGc < Test::Unit::TestCase
assert_equal(count[:FREE], stat[:heap_free_slot])
end
+ def test_stat_argument
+ assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) {GC.stat(:"\u{30eb 30d3 30fc}")}
+ end
+
def test_stat_single
stat = GC.stat
assert_equal stat[:count], GC.stat(:count)
@@ -124,6 +128,7 @@ class TestGc < Test::Unit::TestCase
assert_not_empty info
assert_equal info[:gc_by], GC.latest_gc_info(:gc_by)
assert_raises(ArgumentError){ GC.latest_gc_info(:invalid) }
+ assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) {GC.latest_gc_info(:"\u{30eb 30d3 30fc}")}
end
def test_singleton_method