From: nobu@... Date: 2004-12-06T17:17:10+09:00 Subject: [ruby-dev:25073] Re: UDPSocket#bind dumps core なかだです。 At Sun, 5 Dec 2004 23:59:59 +0900, Tanaka Akira wrote in [ruby-dev:25057]: > 次のようにすると core を吐きます。 > > % ./ruby -rsocket -e ' > s = UDPSocket.new > host = Object.new > class << host; self end.send(:define_method, :to_str) { > s.close > "127.0.0.1" > } > s.bind(host, 2000) > ' > -e:8: [BUG] Segmentation fault > ruby 1.9.0 (2004-12-05) [i686-linux] 三つまとめて。 * ext/socket/socket.c (bsock_setsockopt): avoid segfault. [ruby-dev:25039] * ext/socket/socket.c (udp_connect): ditto. [ruby-dev:25045] * ext/socket/socket.c (udp_bind): ditto. [ruby-dev:25057] Index: ext/socket/socket.c =================================================================== RCS file: /cvs/ruby/src/ruby/ext/socket/socket.c,v retrieving revision 1.134 diff -U2 -p -d -r1.134 socket.c --- ext/socket/socket.c 10 Nov 2004 07:16:24 -0000 1.134 +++ ext/socket/socket.c 6 Dec 2004 07:43:47 -0000 @@ -286,5 +286,4 @@ bsock_setsockopt(sock, lev, optname, val level = NUM2INT(lev); option = NUM2INT(optname); - GetOpenFile(sock, fptr); switch (TYPE(val)) { @@ -307,4 +306,5 @@ bsock_setsockopt(sock, lev, optname, val } + GetOpenFile(sock, fptr); if (setsockopt(fileno(fptr->f), level, option, v, vlen) < 0) rb_sys_fail(fptr->path); @@ -1095,5 +1095,5 @@ tcp_init(argc, argv, sock) return init_inetsock(sock, remote_host, remote_serv, - local_host, local_serv, INET_CLIENT); + local_host, local_serv, INET_CLIENT); } @@ -1463,6 +1463,6 @@ udp_connect(sock, host, port) rb_secure(3); - GetOpenFile(sock, fptr); arg.res = sock_addrinfo(host, port, SOCK_DGRAM, 0); + GetOpenFile(sock, fptr); arg.fd = fileno(fptr->f); ret = rb_ensure(udp_connect_internal, (VALUE)&arg, @@ -1480,6 +1480,6 @@ udp_bind(sock, host, port) rb_secure(3); - GetOpenFile(sock, fptr); res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0); + GetOpenFile(sock, fptr); for (res = res0; res; res = res->ai_next) { if (bind(fileno(fptr->f), res->ai_addr, res->ai_addrlen) < 0) { -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦