Bug #19459
closedIs `length` of `IO::Buffer#read` required or optional?
Description
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.
* 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?
Updated by nobu (Nobuyoshi Nakada) almost 2 years ago
- Status changed from Assigned to Closed
Applied in changeset git|3b567eb491e460e00a66fdea8054eeb083b5dafd.
[Bug #19459] Remove unnecessary always-true checks (#7362)
length
is a required argument for IO::Buffer#read
and
IO::Buffer#write
methods, and argc
is already checked with
rb_check_arity
. Also fix the call-seq of IO::Buffer#read
.
Updated by naruse (Yui NARUSE) almost 2 years ago
- 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.
Updated by ioquatix (Samuel Williams) almost 2 years ago
Thanks!