summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2025-11-22 23:43:19 +0900
committerNobuyoshi Nakada <nobu.nakada@gmail.com>2025-12-17 12:35:38 +0900
commitc353b625297162024b5a80480664e599dd49a294 (patch)
tree63faea9cde7bc548718a9753ba6627a1dbd0dd4f /test/ruby
parent9519d16381c8a8ddf7e1128a08fd80dfac8ed327 (diff)
[Bug #21787] IO::Buffer: Check addition overflows
https://hackerone.com/reports/3437743
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_io_buffer.rb15
1 files changed, 14 insertions, 1 deletions
diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb
index 62766130ce..e996fc39b8 100644
--- a/test/ruby/test_io_buffer.rb
+++ b/test/ruby/test_io_buffer.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: false
require 'tempfile'
+require 'rbconfig/sizeof'
class TestIOBuffer < Test::Unit::TestCase
experimental = Warning[:experimental]
@@ -414,6 +415,8 @@ class TestIOBuffer < Test::Unit::TestCase
:F64 => [-1.0, 0.0, 0.5, 1.0, 128.0],
}
+ SIZE_MAX = RbConfig::LIMITS["SIZE_MAX"]
+
def test_get_set_value
buffer = IO::Buffer.new(128)
@@ -422,6 +425,16 @@ class TestIOBuffer < Test::Unit::TestCase
buffer.set_value(data_type, 0, value)
assert_equal value, buffer.get_value(data_type, 0), "Converting #{value} as #{data_type}."
end
+ assert_raise(ArgumentError) {buffer.get_value(data_type, 128)}
+ assert_raise(ArgumentError) {buffer.set_value(data_type, 128, 0)}
+ case data_type
+ when :U8, :S8
+ else
+ assert_raise(ArgumentError) {buffer.get_value(data_type, 127)}
+ assert_raise(ArgumentError) {buffer.set_value(data_type, 127, 0)}
+ assert_raise(ArgumentError) {buffer.get_value(data_type, SIZE_MAX)}
+ assert_raise(ArgumentError) {buffer.set_value(data_type, SIZE_MAX, 0)}
+ end
end
end
@@ -503,7 +516,7 @@ class TestIOBuffer < Test::Unit::TestCase
assert_raise(ArgumentError) {buffer.clear(0, 20)}
assert_raise(ArgumentError) {buffer.clear(0, 0, 20)}
assert_raise(ArgumentError) {buffer.clear(0, 10, 10)}
- assert_raise(ArgumentError) {buffer.clear(0, (1<<64)-8, 10)}
+ assert_raise(ArgumentError) {buffer.clear(0, SIZE_MAX-7, 10)}
end
def test_invalidation