ruby-trunk-changes r45453 - r45465

今日は psych に同梱している libyaml の security fix を含むバージョンアップ、文字列のパターンマッチで不要なオブジェクト生成を省く修正の追加修正などがありました。

hsbt: r45453 2014-03-28 09:19:15 +0900

拡張ライブラリ psych に同梱されている libyaml を 0.1.5 から 0.1.6 に更新しています。 これにあわせて psych のバージョンも 2.0.4 から 2.0.5 に上げています。 CVE-2014-2525 の libyaml の脆弱性修正が含まれているそうです。 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-2525
利用している環境の libyaml を更新して(DebianRedHat は対応版パッケージを出しているようです)拡張ライブラリをビルドしなおすか、gem install で psych-2.0.5 をインストールすることでも対応できます。

svn: r45454 2014-03-28 09:19:20 +0900

version.h の日付更新。

hsbt: r45455 2014-03-28 09:23:13 +0900

拡張ライブラリ psych の gemspec ファイルのバージョンを更新しています。 こっちは 2.0.3 のままだったみたいですね。

naruse: r45456 2014-03-28 10:17:51 +0900

r45417 で powerpc64-linux での C level backtrace 取得のデバッグ用に一時的にバックトレース出力を rb_bug() の最後の出力にしていたのを元の位置に戻しています。

naruse: r45457 2014-03-28 10:23:02 +0900

さらに r45417 や r45435 で追加していた powerpc64-linux でのデバッグ用に挿入していたデバッグ出力用の kprintf() の呼び出しも削除しています。

nobu: r45458 2014-03-28 11:27:14 +0900

r45414 から連なる String#gsub などのパターンマッチでの不要なオブジェクト生成を抑制する変更で、パターンに文字列を渡した時にも $~ (Regexp.last_match) をクリアするように…しようとしているようにコメントを読むと思えるのですが、実際には set_backref_str が真の時だけセットしているようにみえるので間違っているような…。

nobu: r45459 2014-03-28 11:28:16 +0900

同じく r45414 から連なるパターンマッチの修正で、String#gsub などで置換する文字が "\0" などマッチした文字を参照していた時やブロックで置換結果を渡していた時にうまく動くように参照用のオブジェクトを確保するようにしているみたいです。

nobu: r45460 2014-03-28 11:28:18 +0900

これも r45414 から連なる変更の一部(多分)で、String#scan や String#gsub などで作った MatchData をパターンの文字列が taint されていたら taint するようにしています。

nobu: r45461 2014-03-28 16:58:10 +0900

.gdbinit の rp に Symbol GC のために r45426 で導入した struct RSymbol、T_SYMBOL に対応させています。

nobu: r45462 2014-03-28 19:32:16 +0900

Struct で存在しないメンバ名へのアクセスの例外発生でのコードが2箇所に別々にあったのをまとめるリファクタリングです。チケットは微妙に違うメッセージを同じにしよう、というパッチの投稿でしたが、例外を発生させる関数 not_a_member() として括り出して実装も同じにしています。 [ruby-core:61721] [Bug #9684]

nobu: r45463 2014-03-28 19:32:36 +0900

r45462 で括り出した not_a_member() 関数で例外のメッセージに埋め込むメンバ名を PRIsVALUE を使って VALUE のまま埋め込むことでエンコーディングを保持するようにしています。

nobu: r45464 2014-03-28 21:36:26 +0900

parse.y に rb_id_attrget() という Symbol の ID の setter(xxx= のように = のつくもの)から対応する getter (さっきの例だと xxx)を返す API を追加しています。

nobu: r45465 2014-03-28 21:36:27 +0900

r45464 で追加した rb_id_attrget() を利用して Struct のメンバの値のセット、参照時に ID でなくて Symbol でメンバを指定することで SYM2ID() を呼んで Symbol を pin down して GC できなくするのを避けるようにしています。