diff options
| author | nagachika <nagachika@ruby-lang.org> | 2023-10-28 11:39:43 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2023-10-28 11:57:52 +0900 |
| commit | 8bbf909bb561732057b533cee1618b14886e07ba (patch) | |
| tree | 650ee32327deaa4bb808c0c038ba461793dcaf3f | |
| parent | 2d6067dc7d02c5942da6636bba8b1629065aecf0 (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 d981fd26c7..9039584025 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -1103,8 +1103,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 a0949a54f2..13e28abea9 100644 --- a/test/ruby/test_io_buffer.rb +++ b/test/ruby/test_io_buffer.rb @@ -237,6 +237,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 2 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 126 +#define RUBY_PATCHLEVEL 127 #include "ruby/version.h" #include "ruby/internal/abi.h" |
