[ruby-core:63525] [ruby-trunk - Bug #10007] [Closed] IO#read does not respect String Copy-On-Write in some cases

From: nobu@...
Date: 2014-07-03 01:11:13 UTC
List: ruby-core #63525
Issue #10007 has been updated by Nobuyoshi Nakada.

Status changed from Open to Closed
Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED

2.0.0p510 and 2.1.2p161 have no problems.

----------------------------------------
Bug #10007: IO#read does not respect String Copy-On-Write in some cases
https://bugs.ruby-lang.org/issues/10007#change-47573

* Author: Andrey Zaikin
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
* Backport: 2.0.0: DONTNEED, 2.1: DONTNEED
----------------------------------------
~~~ruby
#!/usr/bin/env ruby

CHUNK_SIZE = 29            # no problems with CHUNK_SIZE = 28

File.open(__FILE__,'r') do |f|
  d0 = ''
  a = []

  f.read(CHUNK_SIZE, d0)
  a << d0[15..-2]
  a << d0[5..-2]
  a << d0[-5..-2]
  a << d0[15..-1]
  a << d0[5..-1]           # <-- only this string will change
  a << d0[-5..-1]
  p a
  f.read(CHUNK_SIZE, d0)   # <-- 2nd read
  p a
end
~~~

output on ruby 1.9.3p448: **(all strings are similar before and after 2nd read)** 

~~~
["ruby\n\nCHUNK_S", "r/bin/env ruby\n\nCHUNK_S", "NK_S", "ruby\n\nCHUNK_SI", "r/bin/env ruby\n\nCHUNK_SI", "NK_SI"]
["ruby\n\nCHUNK_S", "r/bin/env ruby\n\nCHUNK_S", "NK_S", "ruby\n\nCHUNK_SI", "r/bin/env ruby\n\nCHUNK_SI", "NK_SI"]
~~~

output on ruby 2.0.0p481, 2.0.0p353, 2.0.0p247: **(5th string changed unexpectedly!)**

~~~
["ruby\n\nCHUNK_S", "r/bin/env ruby\n\nCHUNK_S", "NK_S", "ruby\n\nCHUNK_SI", "r/bin/env ruby\n\nCHUNK_SI", "NK_SI"]
["ruby\n\nCHUNK_S", "r/bin/env ruby\n\nCHUNK_S", "NK_S", "ruby\n\nCHUNK_SI", "29\n\nFile.open(__FILE__,'", "NK_SI"]
~~~



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next