[ruby-core:112889] [Ruby master Bug#19459] Is `length` of `IO::Buffer#read` required or optional?
From:
"naruse (Yui NARUSE) via ruby-core" <ruby-core@...>
Date:
2023-03-15 07:35:00 UTC
List:
ruby-core #112889
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/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/