From: matz@... (Yukihiro Matsumoto) Date: 2002-08-01T13:37:40+09:00 Subject: [ruby-list:35678] Re: STR2CSTR() まつもと ゆきひろです In message "[ruby-list:35677] Re: STR2CSTR()" on 02/08/01, OHARA Shigeki writes: |> 保証しているつもりです。どっかにバグがあったんでしょうか。 | |ですよね。 |とすると、私のプログラムの方にバグがあるのかも知れません……。 いえいえ、うーん、仕組みはよく分からないのですが、以下のよう なパッチが有効かもしれません(未テスト)。試してみてくださいま せんか? 1.6, 1,7ともに有効なパッチです。 --- ext/socket/socket.c 2002/07/26 06:17:44 1.81 +++ ext/socket/socket.c 2002/08/01 04:35:56 @@ -454,7 +454,6 @@ TRAP_BEG; - RSTRING(str)->len = recvfrom(fd, RSTRING(str)->ptr, RSTRING(str)->len, flags, - (struct sockaddr*)buf, &alen); + len = recvfrom(fd, RSTRING(str)->ptr, len, flags, (struct sockaddr*)buf, &alen); TRAP_END; - if (RSTRING(str)->len < 0) { + if (len < 0) { switch (errno) { @@ -465,2 +464,6 @@ rb_sys_fail("recvfrom(2)"); + } + if (len < RSTRING(str)->len) { + RSTRING(str)->len = len; + RSTRING(str)->ptr[len] = '\0'; }