ruby-trunk-changes r45593 - r45603

今日は拡張ライブラリ openssl のメモリリーク修正、昨日の Enumerable#each_slice, #each_cons の最適化の際のバグの修正や getcwd(3) を使うときのメモリ確保戦略の変更などがありました。

nobu: r45593 2014-04-16 01:23:07 +0900

おそらく r45592 の変更で win32/win32.c で使っている NtCmdLineElement という構造体の len メンバの型が合わなくなったので int -> long に変更しています。

svn: r45594 2014-04-16 01:23:11 +0900

version.h の日付更新。

nobu: r45595 2014-04-16 09:51:18 +0900

拡張ライブラリ openssl の OpenSSL::PKey#verify で EVP_MD_CTX_cleanup() の呼び忘れによるメモリリークがあったのを修正しています。 [ruby-core:62038] [Bug #9743]

nobu: r45596 2014-04-16 11:46:51 +0900

dln_find.c で #if defined(_WIN32) で分岐して環境変数 PATH のセパレータを ";" と ":" どちらを使うかを切り替えていたのを PATH_SEP という定数マクロを利用するようにリファクタリングしています。ちなみに PATH_SEP は include/ruby/defines.h で定義されています。

nobu: r45597 2014-04-16 11:46:53 +0900

win32/win32.c で CharNext() を関数マクロとして定義して CharNextExA() 関数(参考URL: http://msdn.microsoft.com/ja-jp/library/cc410671.aspx) を呼び出すようにして code page を意識した処理をするようにしているそうです。

nobu: r45598 2014-04-16 17:46:29 +0900

POSIX.1-2001 で getcwd(3) は引数に NULL を渡すと内部でメモリ確保して返すそうで、NO_GETCWD_MALLOC というマクロが定義されていなければ getcwd(3) にメモリ確保をまかせるようにして ruby_getcwd() で xmalloc()/xrealloc() でメモリ確保するのをやめています。 NO_GETCWD_MALLOC は特に configure で定義したりしてる様子はないのですが、対応していない環境とかないんですかね…。

nobu: r45599 2014-04-16 17:46:31 +0900

MANGLED_PATH というマクロが定義されている時(どうやら Symbian では定義されていたらしい)に RUBYLIB_PREFIX という環境変数を利用した処理をしていたのは既に利用されていないので関数毎削除しています。なんか昔この処理なにやってるんだろうとひとしきり読んだ後で通ってないことに気がついてがっくりしたようなことがあった気がします。

nobu: r45600 2014-04-16 23:16:19 +0900

標準添付ライブラリ fileutils の FileUtils.cp のテストで、権限情報がコピーされることを確認するテストなのに :preserve オプションが指定されていないテストがあったので明示的に true を指定するようにしています。

nobu: r45601 2014-04-16 23:30:21 +0900

と思ったら r45600 の FileUtils.cp のテストの変更を revert しています。あれ? と思いましたがこのテストは [Bug #4507] のチケットのためのテストで、明示的に :preserve が指定されなくてもデフォルトの挙動が preserve: true になっていることを確認するためのテストだったので、明示的にオプションを追加してしまってはいけないのでした。

nobu: r45602 2014-04-16 23:44:46 +0900

なんとこれまで Enumerable#each_slice と Enumerable#each_cons のテストがなかったようで(Enumerator と Enumerator::Lazy のはあった) test/ruby/test_enum.rb にテストメソッドを追加しています。なんとなく昨日の r45589 の変更を考えるとブロックパラメータを複数にしたケースも追加したほうが良いような気がしますね…と思ったら次でちゃんと追加されてました。

nobu: r45603 2014-04-16 23:47:38 +0900

r45602 で追加した Enumerable#each_slice と Enumerable#each_cons のテストにブロックパラメータが負の arity を持つ(*args のような可変長のブロックパラメータを受けつける記法を使った)時のテストケースを追加しています。 r45589 の中間オブジェクトの抑制で arity の判定に問題があって内部的な Array オブジェクトが Ruby スクリプトで見えてしまっていたそうです。 [ruby-core:62060] [Bug #9749]