diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2022-07-21 14:50:44 +0200 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2022-07-21 18:43:45 +0200 |
commit | 79406e3600862bbb6dcdd7c5ef8de1978e6f916c (patch) | |
tree | 72dabd6309768b702d7d740b2af97688fea4a973 /test/objspace | |
parent | 5b21e94bebed90180d8ff63dad03b8b948361089 (diff) | |
download | ruby-79406e3600862bbb6dcdd7c5ef8de1978e6f916c.tar.gz |
objspace_dump.c: skip dumping method name if not pure ASCII
Sidekiq has a method named `❨╯°□°❩╯︵┻━┻`which corrupts
heap dumps.
Normally we could just dump is as is since it's valid UTF-8 and need
no escaping. But our code to escape control characters isn't UTF-8
aware so it's more complicated than it seems.
Ultimately since the overwhelming majority of method names are
pure ASCII, it's not a big loss to just skip it.
Diffstat (limited to 'test/objspace')
-rw-r--r-- | test/objspace/test_objspace.rb | 13 |
1 files changed, 13 insertions, 0 deletions
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 |