[ruby-core:112541] [Ruby master Bug#19459] Is `length` of `IO::Buffer#read` required or optional?

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/

Issue #19459 has been updated by nobu (Nobuyoshi Nakada). https://github.com/nobu/ruby/tree/io_buffer-unnecessary-checks ---------------------------------------- Bug #19459: Is `length` of `IO::Buffer#read` required or optional? https://bugs.ruby-lang.org/issues/19459#change-101987 * 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/

Issue #19459 has been updated by naruse (Yui NARUSE). Backport changed from 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE ruby_3_2 db28f7003f7d49cfa13871c38d10c1967282ca6b merged revision(s) 3b567eb491e460e00a66fdea8054eeb083b5dafd. ---------------------------------------- Bug #19459: Is `length` of `IO::Buffer#read` required or optional? https://bugs.ruby-lang.org/issues/19459#change-102405 * Author: nobu (Nobuyoshi Nakada) * Status: Closed * Priority: Normal * Assignee: ioquatix (Samuel Williams) * Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE ---------------------------------------- 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/

Issue #19459 has been updated by ioquatix (Samuel Williams). Thanks! ---------------------------------------- Bug #19459: Is `length` of `IO::Buffer#read` required or optional? https://bugs.ruby-lang.org/issues/19459#change-102407 * Author: nobu (Nobuyoshi Nakada) * Status: Closed * Priority: Normal * Assignee: ioquatix (Samuel Williams) * Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE ---------------------------------------- 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/
participants (3)
-
ioquatix (Samuel Williams)
-
naruse (Yui NARUSE)
-
nobu (Nobuyoshi Nakada)