From: nagachika00@... Date: 2014-06-30T18:12:39+00:00 Subject: [ruby-core:63447] [ruby-trunk - Bug #8625] IO#read(len, buf) shortens buf even if data is not read actually Issue #8625 has been updated by Tomoyuki Chikanaga. Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE Backported into `ruby_2_1` branch at r46629. ---------------------------------------- Bug #8625: IO#read(len, buf) shortens buf even if data is not read actually https://bugs.ruby-lang.org/issues/8625#change-47490 * 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/