From: nobu@... Date: 2014-06-06T04:39:47+00:00 Subject: [ruby-core:62953] [ruby-trunk - Bug #8625] [Closed] IO#read(len, buf) shortens buf even if data is not read actually Issue #8625 has been updated by Nobuyoshi Nakada. Status changed from Assigned to Closed % Done changed from 0 to 100 Applied in changeset r46360. ---------- io.c: not shorten buffer unless succeeded * io.c (io_setstrbuf, io_read): should not shorten the given buffer until read succeeds. [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-47052 * Author: Nobuhiro IMAI * Status: Closed * Priority: Normal * Assignee: Masaki Matsushita * 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/