Issue #8625 has been updated by Nobuyoshi Nakada.

Status changed from Assigned to Closed

Applied in changeset r46372.

----------
io.c: truncate before appending

* io.c (read_all): truncate the buffer before appending read data,
  instead of truncating before reading.
  [ruby-core:55951] [Bug #8625]

----------------------------------------
Bug #8625: IO#read(len, buf) shortens buf even if data is not read actually
https://bugs.ruby-lang.org/issues/8625#change-47071

* Author: Nobuhiro IMAI
* Status: Closed
* Priority: Normal
* Assignee: Nobuyoshi Nakada
* Category: core
* Target version: 
* ruby -v: ruby 2.1.0dev (2013-07-11 trunk 41923) [x86_64-linux]
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
By r34580, `IO#read(len, buf)` does not expand _buf_ until data is read actually,
but it still shortens if the original _buf_ size is greater than _len_.
Is this an intended behavior?

~~~ruby
def m(s)
  IO.pipe do |r, w|
    t = Thread.new{r.read(2, s)}
    Thread.pass until t.stop?
    t.kill
    t.value
  end
end

(1..3).each do |len|
  s = "x" * len
  s # => "x", "xx", "xxx"
  m(s)
  s # => "x", "xx", "xx"
end
~~~




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