diff options
| author | himura467 <akitoshitara@gmail.com> | 2026-05-14 14:24:44 +0900 |
|---|---|---|
| committer | Sutou Kouhei <kou@cozmixng.org> | 2026-05-15 09:58:18 +0900 |
| commit | 2552db04ddc44349c7b0f5f93aeb0fb02eccb509 (patch) | |
| tree | 8dbfca42b0e56a62f241c16555c6f550870f8182 /test | |
| parent | 356c0cd0e7953baafd240914476213566f526c85 (diff) | |
Fix UAF in IO::Buffer#& when self or mask is an invalidated slice
Diffstat (limited to 'test')
| -rw-r--r-- | test/ruby/test_io_buffer.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb index 6213bb28d7..50eb1a08e3 100644 --- a/test/ruby/test_io_buffer.rb +++ b/test/ruby/test_io_buffer.rb @@ -702,6 +702,24 @@ class TestIOBuffer < Test::Unit::TestCase assert_equal IO::Buffer.for("\xce\xcd\xcc\xcb\xce\xcd\xcc\xcb\xce\xcd"), source.dup.not! end + def test_and_raises_on_freed_self + inner = IO::Buffer.new(IO::Buffer::PAGE_SIZE) + slice = inner.slice(0, 8) + inner.free + + mask = IO::Buffer.for("ABCDEFGH") + assert_raise(IO::Buffer::InvalidatedError) { slice & mask } + end + + def test_and_raises_on_freed_mask + inner = IO::Buffer.new(IO::Buffer::PAGE_SIZE) + mask_slice = inner.slice(0, 8) + inner.free + + source = IO::Buffer.for("ABCDEFGH") + assert_raise(IO::Buffer::InvalidatedError) { source & mask_slice } + end + def test_bit_count # All ones: 8 bits set per byte assert_equal 8, IO::Buffer.for("\xFF").bit_count |
