zundaと申します

ruby-1.8.2では期待通りに動いていたBitChannelがruby-1.8.3で期待通りに動
かなくなったのをきかっけに、WEBrick::HTTPRequest#queryが返す値がruby-1.8.2
から1.8.3で変わったことに気づきました。1.8.2と1.8.3と、どちらが期待され
る動作かご存じの方がいらっしゃたらお知らせいただけませんか?

手元のBitChannel(1.162)では、http://example.com/PageName.htmlというURLに来た
リクエストをApache(2.0.48)のmod_rewriteでhttp://example.com/?cmd=view;name=PageName
にリダイレクトしてからindex.cgiを呼びだしています。

BitChannelの内部では、lib/bitchannel/handler.rbでWEBrick::HTTPRequest#query['name']
を呼んでリクエストされたページ名を解釈しているようです。下記のdiffにあるように、
このメソッドが参照するURLが、ruby-1.8.2では環境変数SCRIPT_NAME、PATH_INFO、
QUERY_STRINGをつなぎ合わせて作られていたのに対して、ruby-1.8.3ではREQUEST_URI
をもとにして作られているようです。このため、ruby-1.8.3で動くBitChannelはリクエスト
されたページ名が得られずに、いつでもFrontPageを表示するようになっています。

この変更は意図されたものでしょうか?ご存じの方、お知らせください。

--- ruby-1.8.2/lib/webrick/cgi.rb       2004-09-15 23:14:27.000000000 -1000
+++ ruby-1.8.3/lib/webrick/cgi.rb       2005-09-26 21:23:05.000000000 -1000
(前略)
       def request_line
-        meth = @env["REQUEST_METHOD"]
-        url = @env["SCRIPT_NAME"].dup
-        if path_info = @env["PATH_INFO"]
-          url << path_info
-        end
-        if query_string = @env["QUERY_STRING"]
-          unless query_string.empty?
-            url << "?" << query_string
+        meth = @env["REQUEST_METHOD"] || "GET"
+        unless url = @env["REQUEST_URI"]
+          url = (@env["SCRIPT_NAME"] || File.expand_path($0)).dup
+          url << @env["PATH_INFO"].to_s
+          url = WEBrick::HTTPUtils.escape_path(url)
+          if query_string = @env["QUERY_STRING"]
+            unless query_string.empty?
+              url << "?" << query_string
+            end
           end
         end
         # we cannot get real HTTP version of client ;)
         httpv = @config[:HTTPVersion]
-        "#{meth} #{url} HTTP/#{httpv}"
+        return "#{meth} #{url} HTTP/#{httpv}"
       end


__________________________________
 For All Sports Fans!
 http://pr.mail.yahoo.co.jp/yells/