mirror of
https://github.com/ruby/ruby.git
synced 2025-08-28 15:36:16 +02:00
String#b: Don't depend on dependent string
Registering a string that depend on a dependent string as fstring can lead to use-after-free. Seec06ddfe
and3f95620
for details. The following script triggers use-after-free on trunk, 2.4.6, 2.5.5 and 2.6.3. Credits to @wanabe for using eval as a cross-version way of registering a fstring. ```ruby a = ('j' * 24).b.b eval('', binding, a) p a 4.times { GC.start } p a ``` - string.c (str_replace_shared_without_enc): when given a dependent string, depend on the root of the dependent string. [Bug #15934]
This commit is contained in:
parent
39a8c71424
commit
9dec4e8fc3
2 changed files with 19 additions and 4 deletions
|
@ -2983,6 +2983,14 @@ CODE
|
|||
assert_equal(('a' * 24), a, '[Bug #15792]')
|
||||
end
|
||||
|
||||
def test_nesting_shared_b
|
||||
a = ('j' * 24).b.b
|
||||
eval('', binding, a)
|
||||
assert_equal(('j' * 24), a)
|
||||
4.times { GC.start }
|
||||
assert_equal(('j' * 24), a, '[Bug #15934]')
|
||||
end
|
||||
|
||||
def test_shared_force_encoding
|
||||
s = "\u{3066}\u{3059}\u{3068}".gsub(//, '')
|
||||
h = {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue