[#19958] shim/ruby16/tests — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
6 messages
2003/04/04
[#19960] Re: shim/ruby16/tests
— matz@... (Yukihiro Matsumoto)
2003/04/04
まつもと ゆきひろです
[#19965] unpack_sockaddr_in: sockaddr_in size differs — GOTOU Yuuzou <gotoyuzo@...>
Socket::unpack_sockaddr_in が struct sockaddr_in6 の場合にエラー
4 messages
2003/04/07
[#19980] ""*n — Tadayoshi Funaba <tadf@...5.so-net.ne.jp>
rb_str_times ですけど、こうしても構わないですか?
7 messages
2003/04/09
[#19987] Re: I quote: "Maybe IRB bug!!" — keiju@... (Keiju ISHITSUKA)
けいじゅ@ラショナルソフトウェアです.
9 messages
2003/04/09
[#19988] Re: I quote: "Maybe IRB bug!!"
— matz@... (Yukihiro Matsumoto)
2003/04/10
まつもと ゆきひろです
[#19990] Re: I quote: "Maybe IRB bug!!"
— keiju@... (石塚圭樹)
2003/04/10
けいじゅ@ラショナルソフトウェアです.
[#19992] lib/date — Tadayoshi Funaba <tadf@...5.so-net.ne.jp>
ふなばです。
8 messages
2003/04/10
[#20007] SEGV on File.stat(String.allocate) — nobu.nakada@...
なかだです。
5 messages
2003/04/11
[#20012] radix from 2 through 36 — nobu.nakada@...
なかだです。
10 messages
2003/04/11
[#20019] Re: radix from 2 through 36
— matz@... (Yukihiro Matsumoto)
2003/04/13
まつもと ゆきひろです
[#20020] Re: radix from 2 through 36
— nobu.nakada@...
2003/04/13
なかだです。
[#20024] pai.rb — Tanaka Akira <akr@...17n.org>
ふと思ったんですが、pai.rb の pai というのはπなんでしょうか?
5 messages
2003/04/14
[#20033] Exception#initialize — nobu.nakada@...
なかだです。
9 messages
2003/04/18
[#20237] Re: Exception#initialize
— matz@... (Yukihiro Matsumoto)
2003/05/20
まつもと ゆきひろです
[#20241] Re: Exception#initialize
— nobu.nakada@...
2003/05/20
なかだです。
[#20036] Re: Roundoff problem with Float and Marshal — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
16 messages
2003/04/18
[#20045] Re: Roundoff problem with Float and Marshal
— nobu.nakada@...
2003/04/20
なかだです。
[#20063] Re: Roundoff problem with Float and Marshal
— matz@... (Yukihiro Matsumoto)
2003/04/22
まつもと ゆきひろです
[#20064] Re: Roundoff problem with Float and Marshal
— matz@... (Yukihiro Matsumoto)
2003/04/23
まつもと ゆきひろです
[#20065] Re: Roundoff problem with Float and Marshal
— nobu.nakada@...
2003/04/23
なかだです。
[#20066] Re: Roundoff problem with Float and Marshal
— matz@... (Yukihiro Matsumoto)
2003/04/23
まつもと ゆきひろです
[#20038] bigdecimal/lib — Minero Aoki <aamine@...>
あおきです。
6 messages
2003/04/20
[#20047] Array#indexes and Array#select — WATANABE Hirofumi <eban@...>
わたなべです。
5 messages
2003/04/20
[#20067] failed to build ruby on HURD — akira yamada / やまだあきら <akira@...>
8 messages
2003/04/23
[#20097] jcode.rb — akira yamada / やまだあきら <akira@...>
25 messages
2003/04/26
[#20098] Re: jcode.rb
— matz@... (Yukihiro Matsumoto)
2003/04/27
まつもと ゆきひろです
[#20105] Re: jcode.rb
— WATANABE Hirofumi <eban@...>
2003/04/28
わたなべです。
[#20108] Re: jcode.rb
— matz@... (Yukihiro Matsumoto)
2003/04/28
まつもと ゆきひろです
[#20110] Re: jcode.rb
— Hiroyuki Komatsu <komatsu@...>
2003/04/28
小松です.
[#20118] Re: jcode.rb
— Shin-ichiro HARA <sinara@...>
2003/04/30
原です。
[#20132] Re: jcode.rb
— keiju@... (石塚圭樹)
2003/05/01
けいじゅ@ラショナルソフトウェアです.
[#20140] scope-in-state and import-module
— Shin-ichiro HARA <sinara@...>
2003/05/02
原です。
[#20116] Array#map — Shin-ichiro HARA <sinara@...>
原です。
12 messages
2003/04/30
[#20123] Re: Array#map
— matz@... (Yukihiro Matsumoto)
2003/04/30
まつもと ゆきひろです
[#20128] Re: Array#map
— Shin-ichiro HARA <sinara@...>
2003/05/01
原です。
[ruby-dev:19965] unpack_sockaddr_in: sockaddr_in size differs
From:
GOTOU Yuuzou <gotoyuzo@...>
Date:
2003-04-07 05:55:22 UTC
List:
ruby-dev #19965
Socket::unpack_sockaddr_in が struct sockaddr_in6 の場合にエラー
になります。
% ruby -v
ruby 1.8.0 (2003-04-04) [i386-netbsd]
% ruby -r socket -e 'p Socket::unpack_sockaddr_in(Socket::pack_sockaddr_in(0,"::"))'
-e:1:in `unpack_sockaddr_in': sockaddr_in size differs - 28 required; 16 given (TypeError)
from -e:1
応急処置でパッチを作ったので添付してみます。
サイズのチェックが甘いですが、sockaddr_in が詰まった長めのバッ
ファを扱うプログラムを書いていたので、長い分にはエラーにならな
いほうが嬉しいと思います。
--
ごとうゆうぞう
diff -u -p -r1.91 socket.c
--- ext/socket/socket.c 16 Jan 2003 07:38:40 -0000 1.91
+++ ext/socket/socket.c 7 Apr 2003 05:32:08 -0000
@@ -2324,14 +2324,24 @@ static VALUE
sock_s_unpack_sockaddr_in(self, addr)
VALUE self, addr;
{
+ struct sockaddr_storage buf;
+ size_t len;
struct sockaddr_in * sockaddr;
VALUE host;
- sockaddr = (struct sockaddr_in*)StringValuePtr(addr);
- if (RSTRING(addr)->len != sizeof(struct sockaddr_in)) {
- rb_raise(rb_eTypeError, "sockaddr_in size differs - %ld required; %d given",
+ StringValue(addr);
+ if (RSTRING(addr)->len < sizeof(struct sockaddr_in)) {
+ rb_raise(rb_eTypeError,
+ "sockaddr_in size differs - %ld required; %d given",
RSTRING(addr)->len, sizeof(struct sockaddr_in));
}
+ if(RSTRING(addr)->len < sizeof(struct sockaddr_storage))
+ len = RSTRING(addr)->len;
+ else
+ len = sizeof(struct sockaddr_storage);
+ sockaddr = (struct sockaddr_in*)&buf;
+ memset(sockaddr, 0, sizeof(struct sockaddr_storage));
+ memcpy(sockaddr, RSTRING(addr)->ptr, len);
host = mkipaddr((struct sockaddr*)sockaddr);
OBJ_INFECT(host, addr);
return rb_assoc_new(INT2NUM(ntohs(sockaddr->sin_port)), host);