ruby-trunk-changes r39226 - r39241

今日は標準ライブラリ net/http の Content-Encoding と Accept-Encoding の解釈に関する修正と、Module#prepend の循環参照と remove_method との組み合わせて発生する不具合の修正などがありました。

akr:r39226 2013-02-13 23:41:28 +0900

拡張ライブラリ socket の extconf.rb の libnsl と libsocket をチェックしているところに SunOS 向けにチェックしていることをコメントとして追記。

akr:r39230 2013-02-14 08:20:27 +0900

r39225 と同様に拡張ライブラリ socket の extconf.rb で構造体 struct sockaddr_in のメンバ sa_len と sin_len の存在チェックした結果の -D オプションを HAVE_{SA|SIN}_LEN にわざわざ置換していたのをやめて、利用しているソースコード側で HAVE_STRUCT_SOCKADDR_{SA|SIN}_LEN をチェックするように修正しています。

svn:r39231 2013-02-14 08:20:31 +0900

version.h の日付更新。

drbrain:r39232 2013-02-14 10:08:19 +0900

標準ライブラリ net/http で Net::HTTP::Request で Accept-Encoding ヘッダが指定されていなかった時に Response で Content-Encoding を解釈せずそのまま返すようにしているようです。圧縮されていた時など解凍した結果を返さずに、ライブラリの利用側で処理させるそうです。これは 1.8 および 1.9 系との互換性のためとのことです。
多分 r36473 の変更で挙動が変化してしまった部分をケアしているんだと思います。 この時の ruby-trunk-changes のコメントと照し合わせると、デフォルトで Accept-Encoding ヘッダには deflate, gzip が指定されるようにしている(そしてその時は自動的に解凍した結果が返される)のだけど、明示的に Accept-Encoding を指定した場合には解釈せずに返すということのようですね。 [ruby-core:52134] [Bug #7831]

drbrain:r39233 2013-02-14 10:09:37 +0900

r39232 の ChangeLog エントリにチケット番号の参照を追記しています。

nobu:r39234 2013-02-14 10:30:47 +0900

Module#prepend を呼ばれたクラスで remove_method で上書きされたメソッドを削除しようとすると、挿入された IClass に対して method_removed フックを呼ぼうとして NoMethodError が発生していたのでオリジナルのクラスのメソッドを呼ぶようにしています。 なるほどこれは明白にバグですね。 [ruby-core:52207] [Bug #7843]

nobu:r39235 2013-02-14 10:38:07 +0900

r39234 の ChangeLog エントリに ML とチケット番号を追記しています。 またテストの assertion のメッセージにもチケット番号を表示させるようにしています。 [ruby-core:52207] [Bug #7843]

nobu:r39236 2013-02-14 11:08:31 +0900

Module 間で相互に include すると "cyclic include detected" といわれて例外発生するのですが、prepend だと検出されていなかったので Module#prepend でも循環した継承関係にならないように検出してエラーにするようにしています。 [ruby-core:52205] [Bug #7841]

drbrain:r39238 2013-02-14 14:32:58 +0900

標準ライブラリ net/http で例外の rescue の為に 拡張ライブラリ openssl に依存していた部分を defined? でチェックしてから参照することで require していなくても動くようにしています。 また net/http のテストで拡張ライブラリ zlib を必要としていたテストを zlib が利用できなかったらスキップするようにしています。

akr:r39239 2013-02-14 20:28:49 +0900

拡張ライブラリ socket で getnameinfo(3) でアドレス情報を取得する時にソケットアドレス構造体のサイズを渡す時に構造体の sa_len メンバの値を利用するのでなく呼び元から実際に用意しているバッファ(変数)のサイズを渡すようにしています。

akr:r39240 2013-02-14 22:27:46 +0900

拡張ライブラリ socket で ext/socket/socket.c の sockaddr_obj() からソケットアドレス構造体のサイズを指定する部分を sockaddr_len() として切り出しています。またこれを利用して(というか切り出した処理を利用しないようにして) Socket.ip_address_list で渡すソケットアドレスサイズを ioctl(SIOCGLIFCONF) で取得したサイズを渡すようにしています。

kazu:r39241 2013-02-14 23:46:43 +0900

r39239 の ChangeLog エントリ部分の行末の空白除去。