aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorCharles Oliver Nutter <headius@headius.com>2023-10-20 23:30:40 -0500
committerGitHub <noreply@github.com>2023-10-21 17:30:40 +1300
commit55d954721e25ada90482f6d3f751a12fc982620b (patch)
tree09582e517deafb57dc2479ad99245f45c63f6d27 /io.c
parent0e62802c3bdc2167b1c8e5f9db014f1e421f2c62 (diff)
downloadruby-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.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/io.c b/io.c
index f4698a2cd5..28b5abb1c5 100644
--- a/io.c
+++ b/io.c
@@ -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