diff options
author | Charles Oliver Nutter <headius@headius.com> | 2023-10-20 23:30:40 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-21 17:30:40 +1300 |
commit | 55d954721e25ada90482f6d3f751a12fc982620b (patch) | |
tree | 09582e517deafb57dc2479ad99245f45c63f6d27 /io.c | |
parent | 0e62802c3bdc2167b1c8e5f9db014f1e421f2c62 (diff) | |
download | ruby-55d954721e25ada90482f6d3f751a12fc982620b.tar.gz |
Raise TypeError for bad IO::Buffer.map argument (#8728)
* Raise TypeError when IO::Buffer.map argument is neither IO nor implements #fileno
* Use UNREACHABLE_CODE
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
* Use macro for undef check
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
---------
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -2870,8 +2870,15 @@ rb_io_descriptor(VALUE io) return fptr->fd; } else { - return RB_NUM2INT(rb_funcall(io, id_fileno, 0)); + VALUE fileno = rb_check_funcall(io, id_fileno, 0, NULL); + if (!UNDEF_P(fileno)) { + return RB_NUM2INT(fileno); + } } + + rb_raise(rb_eTypeError, "expected IO or #fileno, %"PRIsVALUE" given", rb_obj_class(io)); + + UNREACHABLE_RETURN(-1); } int |