1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Fix handling of frozens strings.

This commit is contained in:
Samuel Williams 2021-12-20 09:43:22 +13:00
parent 9de5c4ec76
commit 71bf5cef75
Notes: git 2021-12-21 08:26:09 +09:00
2 changed files with 14 additions and 1 deletions

View file

@ -279,7 +279,12 @@ rb_io_buffer_type_for(VALUE klass, VALUE string)
rb_str_locktmp(string);
io_buffer_initialize(data, RSTRING_PTR(string), RSTRING_LEN(string), RB_IO_BUFFER_EXTERNAL, string);
enum rb_io_buffer_flags flags = RB_IO_BUFFER_EXTERNAL;
if (RB_OBJ_FROZEN(string))
flags |= RB_IO_BUFFER_IMMUTABLE;
io_buffer_initialize(data, RSTRING_PTR(string), RSTRING_LEN(string), flags, string);
return instance;
}

View file

@ -83,6 +83,7 @@ class TestIOBuffer < Test::Unit::TestCase
def test_string_mapped
string = "Hello World"
buffer = IO::Buffer.for(string)
refute buffer.immutable?
# Cannot modify string as it's locked by the buffer:
assert_raise RuntimeError do
@ -99,6 +100,13 @@ class TestIOBuffer < Test::Unit::TestCase
assert_equal "Hello World", string
end
def test_string_mapped_frozen
string = "Hello World".freeze
buffer = IO::Buffer.for(string)
assert buffer.immutable?
end
def test_non_string
not_string = Object.new