Project

General

Profile

Actions

Bug #19459

closed

Is `length` of `IO::Buffer#read` required or optional?

Added by nobu (Nobuyoshi Nakada) about 1 year ago. Updated about 1 year ago.


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?

Actions #2

Updated by nobu (Nobuyoshi Nakada) about 1 year 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) about 1 year 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0