summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--io_buffer.c5
-rw-r--r--test/ruby/test_io_buffer.rb18
-rw-r--r--version.h2
3 files changed, 24 insertions, 1 deletions
diff --git a/io_buffer.c b/io_buffer.c
index 0ca6ec5632..5951f54fc4 100644
--- a/io_buffer.c
+++ b/io_buffer.c
@@ -1308,6 +1308,11 @@ rb_io_buffer_resize(VALUE self, size_t size)
#endif
if (data->flags & RB_IO_BUFFER_INTERNAL) {
+ if (size == 0) {
+ io_buffer_free(data);
+ return;
+ }
+
void *base = realloc(data->base, size);
if (!base) {
diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb
index e3f7021b26..fdfea00dfe 100644
--- a/test/ruby/test_io_buffer.rb
+++ b/test/ruby/test_io_buffer.rb
@@ -142,6 +142,24 @@ class TestIOBuffer < Test::Unit::TestCase
assert_equal message, buffer.get_string(0, message.bytesize)
end
+ def test_resize_zero_internal
+ buffer = IO::Buffer.new(1)
+
+ buffer.resize(0)
+ assert_equal 0, buffer.size
+
+ buffer.resize(1)
+ assert_equal 1, buffer.size
+ end
+
+ def test_resize_zero_external
+ buffer = IO::Buffer.for('1')
+
+ assert_raise IO::Buffer::AccessError do
+ buffer.resize(0)
+ end
+ end
+
def test_compare_same_size
buffer1 = IO::Buffer.new(1)
assert_equal buffer1, buffer1
diff --git a/version.h b/version.h
index b180a80352..3e6dccb31b 100644
--- a/version.h
+++ b/version.h
@@ -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 233
+#define RUBY_PATCHLEVEL 234
#define RUBY_RELEASE_YEAR 2023
#define RUBY_RELEASE_MONTH 7