[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20199] block_pass fix?

From: Tanaka Akira <akr@...17n.org>
Date: 2003-05-18 03:51:29 UTC
List: ruby-dev #20199
Fri May 16 12:40:40 2003  Yukihiro Matsumoto  <matz@ruby-lang.org>

        * eval.c (block_pass): chain previous block to the pushing block.

という変更が入って以来、

% ./ruby -rresolv -e 'p Resolv.getaddress("www.ruby-lang.org")'
"\322\373y\326"

というようになります。これは本来

% ruby -rresolv -e 'p Resolv.getaddress("www.ruby-lang.org")'  
"210.251.121.214"

となるべきで、間違ってます。

調べてみると、とあるところで Resolv::DNS::Resource::IN::A を yield し
ているにもかかわらず受け取られるのは Resolv::IPv4 という変なことが起き
ているようです。(それにも関わらずエラーにならないのは両方 address とい
うメソッドを持っているからです。行儀が悪い...)

対症療法としては次のパッチを当てると直るんですが、上記のようなことがお
こるのはそもそも変です。また、メソッドに与えられたブロックを &proc で
受けて &proc で渡すのと {|v| yield v } で引き渡すのでそんな違いが出て
来るのも変だと思います。

--- lib/resolv.rb	2003-04-22 06:14:08.000000000 +0900
+++ ../lib/ruby/1.8/resolv.rb	2003-05-18 12:38:18.000000000 +0900
@@ -465,7 +465,7 @@
           timeout(tout, ResolvTimeout) { reply, reply_name = q.pop }
           case reply.rcode
           when RCode::NoError
-            extract_resources(reply, reply_name, typeclass, &proc)
+            extract_resources(reply, reply_name, typeclass) {|v| yield v}
 	    return
           when RCode::NXDomain
             raise Config::NXDomain.new(reply_name.to_s)
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next