
Issue #19459 has been reported by nobu (Nobuyoshi Nakada). ---------------------------------------- Bug #19459: Is `length` of `IO::Buffer#read` required or optional? https://bugs.ruby-lang.org/issues/19459 * Author: nobu (Nobuyoshi Nakada) * Status: Assigned * Priority: Normal * Assignee: ioquatix (Samuel Williams) * Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED ---------------------------------------- io_buffer.c has warnings. http://ci.rvm.jp/logfiles/brlog.trunk-asserts.20230222-105209#L956 ``` /tmp/ruby/src/trunk-asserts/io_buffer.c: In function 'io_buffer_read': /tmp/ruby/src/trunk-asserts/io_buffer.c:2468:12: warning: 'length' may be used uninitialized in this function [-Wmaybe-uninitialized] 2468 | return rb_io_buffer_read(self, io, length, offset); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/ruby/src/trunk-asserts/io_buffer.c: In function 'io_buffer_write': /tmp/ruby/src/trunk-asserts/io_buffer.c:2681:12: warning: 'length' may be used uninitialized in this function [-Wmaybe-uninitialized] 2681 | return rb_io_buffer_write(self, io, length, offset); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/ruby/src/trunk-asserts/io_buffer.c: At top level: cc1: note: unrecognized command-line option '-Wno-self-assign' may have been intended to silence earlier diagnostics cc1: note: unrecognized command-line option '-Wno-parentheses-equality' may have been intended to silence earlier diagnostics cc1: note: unrecognized command-line option '-Wno-constant-logical-operand' may have been intended to silence earlier diagnostics ``` As the `argc` is checked already as `rb_check_arity(argc, 2, 3)`, `length` is a required argument. This means the condition `if (argc >= 2)` is always true and unnecessary, then `length` is initialized. However, in the rdoc of `io_buffer_read`, which has been added at 3.2, states `length` is optional. ```c * call-seq: read(io, [length, [offset]]) -> read length or -errno * * Read at most +length+ bytes from +io+ into the buffer, starting at * +offset+. If an error occurs, return <tt>-errno</tt>. * * If +length+ is not given, read until the end of the buffer. ``` Which is correct? -- https://bugs.ruby-lang.org/