summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/objspace/objspace_dump.c6
-rw-r--r--test/objspace/test_objspace.rb13
2 files changed, 17 insertions, 2 deletions
diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c
index e4f1216a9a..b954fe32fc 100644
--- a/ext/objspace/objspace_dump.c
+++ b/ext/objspace/objspace_dump.c
@@ -547,8 +547,10 @@ dump_object(VALUE obj, struct dump_config *dc)
}
if (RTEST(ainfo->mid)) {
VALUE m = rb_sym2str(ainfo->mid);
- dump_append(dc, ", \"method\":");
- dump_append_string_value(dc, m);
+ if (dump_string_ascii_only(RSTRING_PTR(m), RSTRING_LEN(m))) {
+ dump_append(dc, ", \"method\":");
+ dump_append_string_value(dc, m);
+ }
}
dump_append(dc, ", \"generation\":");
dump_append_sizet(dc, ainfo->generation);
diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb
index 1392447e4f..59ab8e7adc 100644
--- a/test/objspace/test_objspace.rb
+++ b/test/objspace/test_objspace.rb
@@ -725,4 +725,17 @@ class TestObjSpace < Test::Unit::TestCase
assert_equal '42', out[2]
end
end
+
+ def test_utf8_method_names
+ obj = ObjectSpace.trace_object_allocations do
+ utf8_❨╯°□°❩╯︵┻━┻
+ end
+ assert_nil JSON.parse(ObjectSpace.dump(obj))["method"]
+ end
+
+ private
+
+ def utf8_❨╯°□°❩╯︵┻━┻
+ "1" + "2"
+ end
end