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

io.c: buffer must be modifiable

* io.c (io_setstrbuf): always check if the buffer is modifiable.
  [ruby-core:62643] [Bug #9847]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-05-17 23:22:28 +00:00
parent e279eca4bd
commit 831202f85c
3 changed files with 11 additions and 7 deletions

View file

@ -1,3 +1,8 @@
Sun May 18 08:22:25 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (io_setstrbuf): always check if the buffer is modifiable.
[ruby-core:62643] [Bug #9847]
Sun May 18 01:21:23 2014 Tanaka Akira <akr@fsij.org>
* include/ruby/ruby.h: Hide Rational internal.

2
io.c
View file

@ -2370,8 +2370,8 @@ io_setstrbuf(VALUE *str, long len)
VALUE s = StringValue(*str);
long clen = RSTRING_LEN(s);
if (clen >= len) {
rb_str_modify(s);
if (clen != len) {
rb_str_modify(s);
rb_str_set_len(s, len);
}
return;

View file

@ -2839,25 +2839,24 @@ End
def assert_buffer_not_raise_shared_string_error
bug6764 = '[ruby-core:46586]'
bug9847 = '[ruby-core:62643] [Bug #9847]'
size = 28
data = [*"a".."z", *"A".."Z"].shuffle.join("")
t = Tempfile.new("test_io")
t.write(data)
t.close
w = Tempfile.new("test_io")
w = []
assert_nothing_raised(RuntimeError, bug6764) do
buf = ''
File.open(t.path, "r") do |r|
buf = ''
while yield(r, size, buf)
w << buf
w << buf.dup
end
end
end
w.close
assert_equal(data, w.open.read, bug6764)
assert_equal(data, w.join(""), bug9847)
ensure
t.close!
w.close!
end
def test_read_buffer_not_raise_shared_string_error