diff options
| author | U.Nakamura <usa@ruby-lang.org> | 2023-11-06 20:18:14 +0900 |
|---|---|---|
| committer | U.Nakamura <usa@ruby-lang.org> | 2023-11-06 20:18:14 +0900 |
| commit | 4f7b595815bd75706c276b03c8d445748e869f2e (patch) | |
| tree | 70391cfa4ef7ed0d27f3f3a6af8d2c8ee1686b72 | |
| parent | d494cf4ddababb80660381e963f910ccacc3f7bc (diff) | |
merge revision(s) 19346c2336053b351673da030b00c704138252d8: [Backport #19754]
[Bug #19754] Make `IO::Buffer#get_string` check `offset` range
(#8016)
---
io_buffer.c | 3 +++
test/ruby/test_io_buffer.rb | 8 ++++++++
2 files changed, 11 insertions(+)
| -rw-r--r-- | io_buffer.c | 5 | ||||
| -rw-r--r-- | test/ruby/test_io_buffer.rb | 8 | ||||
| -rw-r--r-- | version.h | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/io_buffer.c b/io_buffer.c index 4b806906f2..7d4fa8d330 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -1063,8 +1063,11 @@ rb_io_buffer_free(VALUE self) static inline void io_buffer_validate_range(struct rb_io_buffer *data, size_t offset, size_t length) { + if (offset > data->size) { + rb_raise(rb_eArgError, "Specified offset exceeds buffer size!"); + } if (offset + length > data->size) { - rb_raise(rb_eArgError, "Specified offset+length exceeds data size!"); + rb_raise(rb_eArgError, "Specified offset+length exceeds buffer size!"); } } diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb index fdfea00dfe..c1034efe34 100644 --- a/test/ruby/test_io_buffer.rb +++ b/test/ruby/test_io_buffer.rb @@ -227,6 +227,14 @@ class TestIOBuffer < Test::Unit::TestCase chunk = buffer.get_string(0, message.bytesize, Encoding::BINARY) assert_equal Encoding::BINARY, chunk.encoding + + assert_raise_with_message(ArgumentError, /exceeds buffer size/) do + buffer.get_string(0, 129) + end + + assert_raise_with_message(ArgumentError, /exceeds buffer size/) do + buffer.get_string(129) + end end # We check that values are correctly round tripped. @@ -11,7 +11,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 4 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 245 +#define RUBY_PATCHLEVEL 246 #define RUBY_RELEASE_YEAR 2023 #define RUBY_RELEASE_MONTH 11 |
