summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2023-10-28 11:39:43 +0900
committernagachika <nagachika@ruby-lang.org>2023-10-28 11:57:52 +0900
commit8bbf909bb561732057b533cee1618b14886e07ba (patch)
tree650ee32327deaa4bb808c0c038ba461793dcaf3f
parent2d6067dc7d02c5942da6636bba8b1629065aecf0 (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.c5
-rw-r--r--test/ruby/test_io_buffer.rb8
-rw-r--r--version.h2
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.
diff --git a/version.h b/version.h
index fee3949783..fd676b3049 100644
--- a/version.h
+++ b/version.h
@@ -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"