summaryrefslogtreecommitdiff
path: root/addr2line.c
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2022-12-21 15:09:27 -0500
committerPeter Zhu <[email protected]>2022-12-22 09:23:40 -0500
commitd7388f720c706d94f21ee4e169678a71c73ce37c ()
tree2066b14be77756a043dd6ca91a0deb6d42c44623 /addr2line.c
parentd1d61cabbc332790c0d53fea01f51d52a3489670 (diff)
Fix buffer overrun with auto-compact for shapes
The following script crashes: ```ruby GC.auto_compact = true GC.stress = true class Foo def initialize @a = @b = @c = 0 end def add_ivars @d = @e = @f = 0 end end ary = 1_000.times.map { Foo.new } ary.each { |f| f.add_ivars } ``` This is because in rb_grow_iv_list, it first calls rb_ensure_iv_list_size to allocate the buffer (and also unsets the embed bit) then rb_shape_transition_shape_capa to get the new shape. However, auto-compact can trigger in rb_shape_transition_shape_capa which would re-embed the object since it doesn't have the new shape yet. This causes a crash as the object is now embedded but has a non-embed shape which would cause the object to have a buffer overrun.
Notes: Merged: https://.com/ruby/ruby/pull/6986
0 files changed, 0 insertions, 0 deletions