Issue #8625 has been updated by Usaku NAKAMURA.


backported into `ruby_2_0_0` at r46738.

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

* 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: DONE
----------------------------------------
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/