summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-12-20 09:03:52 +1300
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-12-21 12:25:42 +1300
commit9de5c4ec761aad3edc50b38d9824b40665d18911 (patch)
treef20883478bf71426ca3698e150ca7ac3927a0eeb
parent6ad8cf70713e6ae91a8218d4e0034ebbc1983c69 (diff)
downloadruby-9de5c4ec761aad3edc50b38d9824b40665d18911.tar.gz
Fix mapping invalid non-file object.
-rw-r--r--io_buffer.c3
-rw-r--r--test/ruby/test_io_buffer.rb14
2 files changed, 13 insertions, 4 deletions
diff --git a/io_buffer.c b/io_buffer.c
index 524756e041..a97c687239 100644
--- a/io_buffer.c
+++ b/io_buffer.c
@@ -322,6 +322,9 @@ io_buffer_map(int argc, VALUE *argv, VALUE klass)
}
VALUE io = argv[0];
+ if (!RB_TYPE_P(io, T_FILE)) {
+ rb_raise(rb_eArgError, "Must be file/io!");
+ }
size_t size;
if (argc >= 2) {
diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb
index afc39a8c8e..385a133421 100644
--- a/test/ruby/test_io_buffer.rb
+++ b/test/ruby/test_io_buffer.rb
@@ -9,10 +9,6 @@ class TestIOBuffer < Test::Unit::TestCase
Warning[:experimental] = experimental
end
- def test_default_size
- assert_equal IO::Buffer::DEFAULT_SIZE, IO::Buffer.new.size
- end
-
def assert_negative(value)
assert(value < 0, "Expected #{value} to be negative!")
end
@@ -40,6 +36,10 @@ class TestIOBuffer < Test::Unit::TestCase
assert_include [IO::Buffer::LITTLE_ENDIAN, IO::Buffer::BIG_ENDIAN], IO::Buffer::HOST_ENDIAN
end
+ def test_default_size
+ assert_equal IO::Buffer::DEFAULT_SIZE, IO::Buffer.new.size
+ end
+
def test_new_internal
buffer = IO::Buffer.new(1024, IO::Buffer::INTERNAL)
assert_equal 1024, buffer.size
@@ -74,6 +74,12 @@ class TestIOBuffer < Test::Unit::TestCase
assert_include buffer.to_str, "Hello World"
end
+ def test_file_mapped_invalid
+ assert_raise ArgumentError do
+ IO::Buffer.map("foobar")
+ end
+ end
+
def test_string_mapped
string = "Hello World"
buffer = IO::Buffer.for(string)