[ruby-core:112891] [Ruby master Bug#19459] Is `length` of `IO::Buffer#read` required or optional?
From:
"ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>
Date:
2023-03-15 08:35:14 UTC
List:
ruby-core #112891
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/
______________________________________________
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/