From 3f9562015e651735bfc2fdd14e8f6963b673e22a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 27 Apr 2019 21:21:55 +0900 Subject: Get rid of indirect sharing * string.c (str_duplicate): share the root shared string if the original string is already sharing, so that all shared strings refer the root shared string directly. indirect sharing can cause a dangling pointer. [Bug #15792] --- test/ruby/test_string.rb | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'test/ruby/test_string.rb') diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index d94c4da7ae..f591f7ea9d 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -2961,6 +2961,15 @@ CODE end =end + def test_nesting_shared + a = ('a' * 24).encode(Encoding::ASCII).gsub('x', '') + hash = {} + hash[a] = true + assert_equal(('a' * 24), a) + 4.times { GC.start } + assert_equal(('a' * 24), a, '[Bug #15792]') + end + def test_shared_force_encoding s = "\u{3066}\u{3059}\u{3068}".gsub(//, '') h = {} -- cgit v1.2.3