Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2016-12-03 ruby-trunk-changes r56966 - r56971

[][]ruby-trunk-changes r56966 - r56971

今日は StringIO の gets などの行指向メソッドでも chomp キーワード引数を追加して改行コードを削って返せるようにする変更などがありました。

duerst: r56966 2016-12-03 14:09:09 +0900

test/ruby/enc/test_case_comprehensive.rb のテストクラスの名称を TestComprehensiveCaseFold から TestComprehensiveCaseMapping に改名しています。

svn: r56967 2016-12-03 14:09:10 +0900

version.h の日付更新。

duerst: r56968 2016-12-03 16:18:41 +0900

test/ruby/enc/test_case_mapping.rb に Unicode の casemap を考慮した正規表現の大文字小文字を無視したマッチの動作を確認するテストを追加しています。 [ruby-core:78410] [Bug #12990]

nobu: r56969 2016-12-03 20:01:24 +0900

拡張ライブラリ stringio のテストに StringIO#gets および StringIO#each に "" を渡して paragraph mode で読み込む時のテストを追加しています。

nobu: r56970 2016-12-03 20:01:25 +0900

r56581 で IO#gets などに追加したのと同様に拡張ライブラリ stringio の StringIO#gets などにも chomp オプションを追加して、改行コードを取り除いて返すモードを追加しています。

kazu: r56971 2016-12-03 20:18:44 +0900

hash.c の rb_define_method() の実引数に空白を追加して整形しています。 https://github.com/ruby/ruby/pull/1492 [ruby-core:78297] [Misc #12977]

2016-12-02 ruby-trunk-changes r56957 - r56965

[][]ruby-trunk-changes r56957 - r56965

今日は Array#pack のキーワード引数 buffer の追加や String#unpack1 という unpack の1要素版のメソッドの追加など新機能の追加がありました。

usa: r56957 2016-12-01 22:08:20 +0900

Array#pack にキーワード引数 buffer と offset を追加して、pack で値をエンコードする文字列を buffer で渡した文字列オブジェクトの offset の位置から書き込むように指示することができるようにしています。おーなるほど、バイナリエンコーディングが効率的になりそう。 [ruby-dev:49798] [Feature #12754]

usa: r56958 2016-12-01 22:20:47 +0900

r56957 で追加した Array#pack のキーワード引数の offset ですが、pack のフォーマット文字列の指示子に "@" というのがあって書き込む位置を指定できる(知らなかった…)ので offset は削ってます。

naruse: r56959 2016-12-01 23:18:32 +0900

String#unpack1 というメソッドを追加しています。 これは unpack.first と同じで、要するに unpack は配列を返すけど1つの要素だけデコードする時には配列を作るの無駄だよね、ということですね。これも非常に便利ですね。 [ruby-core:77249] [Feature #12752]

naruse: r56960 2016-12-02 02:43:41 +0900

r56959 で未使用になった pack.c のローカル変数を除去。

svn: r56961 2016-12-02 02:43:42 +0900

version.h の日付更新。

rhe: r56962 2016-12-02 11:24:45 +0900

MatchData#hash の実装で利用された Regexp の hash 値利用されていなかった不具合を修正しています。

nobu: r56963 2016-12-02 11:47:11 +0900

\u{XXXX} の表記で内部の空白を許容するように制限を緩めています。

nobu: r56964 2016-12-02 12:33:54 +0900

\u{XXXX} の記法の parse の処理で不正な codepoint のチェックを parser_tokadd_utf8() から parser_tokadd_codepoint() へ移動して1箇所にまとまるようにしています。

nobu: r56965 2016-12-02 15:12:56 +0900

String#chop や chomp のテストで特殊変数 $/ を変更しているテストメソッドで、例外発生などで抜ける時も $/ を元に戻すように ensure 節を追加しています。

2016-12-01 ruby-trunk-changes r56949 - r56956

[][]ruby-trunk-changes r56949 - r56956

今日は正規表現Unicode 9.0.0 の絵文字の扱いの改善、\u{XXXX} 記法のチェックの強化などがありました。

naruse: r56949 2016-12-01 02:29:19 +0900

正規表現での Unicode 9.0.0 の絵文字の扱いについて改善するため GraphemeBreakProperty.txt という Unicode のデータファイルをダウンロードしてきて文字の境界の扱いについて修正しています。 grapheme cluster という複数の codepoint が集まることで1つの文字(表示上ひとつの文字と認識されるもの)になるという仕組みがあるそうで、それをうまく扱かうための対処みたいです。 [ruby-core:77586] [Feature #12831]

svn: r56950 2016-12-01 02:29:20 +0900

version.h の日付更新。

nobu: r56951 2016-12-01 09:34:41 +0900

enc/unicode/*/casehold.h の CaseMappingSpecials という配列変数の宣言に static const を付けるようにしています。

nobu: r56952 2016-12-01 09:34:42 +0900

tool/enc-unicode.rb で生成する name2ctype.h で配列のメモリ量を削減するため構造体メンバの型を変更しています。また offsetof() マクロを利用するようにしています。

rhe: r56953 2016-12-01 13:42:10 +0900

拡張ライブラリ openssl の upstream から OpenSSL 0.9.8 に存在しなかった関数の対応やテストの修正などをマージしています。

shugo: r56954 2016-12-01 13:51:42 +0900

fifoリダイレクトされた stdin を持つ子プロセスを起動するテストでシグナル送信前に子プロセスbegin 節に入ったことを確認するため pipe 経由で出力を受け取るようにしています。 Solaris 上の CI でタイミングが合わずにエラーになってたみたいです。

hsbt: r56955 2016-12-01 14:24:00 +0900

gems/bundled_gems の minitest と test-unit のバージョンを更新しています。

nobu: r56956 2016-12-01 17:26:39 +0900

parse.y の \u{XXXX} の記法の解析で Unicode として不正な codepoint の値が表現されていたらエラーにするようにしています。

2016-11-30 ruby-trunk-changes r56928 - r56948

[][]ruby-trunk-changes r56928 - r56948

今日はインスタンス変数を動的増やした時に同じクラスの別のインスタンスが不正メモリアクセスする可能性があった不具合の修正や openssl や psych の upstream からのマージなどがありました。

nobu: r56928 2016-11-29 21:54:43 +0900

Thread.abort_on_exception や Thread#abort_on_exception が true に設定されているときに当該 Thread で捕捉されない例外が発生して終了した時の挙動が 1.9 あたりから? 変わっていて main thread にその例外が投げられるようになっていたので、ドキュメントをそれに合わせるように修正しています。昔は abort で終了していた気がしますね。 [ruby-core:78415] [Bug #12991]

nobu: r56929 2016-11-30 00:14:05 +0900

r56906 で即値オブジェクトdup を呼んでも TypeError を発生させないようにする変更がありましたが、Object#clone の freeze オプションに false が渡されてたら ArgumentError を発生させるように追加しています。 clone の freeze ってなんだっけな…。 r55786 で追加された clone 時に元のオブジェクトの freeze フラグを引き継ぐかどうかを指定できるようにしたキーワード引数ですね。確かに freeze しないようにって言われても即値オブジェクトは常に freeze されているものとして扱かわれるので無理ですね。 [Feature #12979]

svn: r56930 2016-11-30 00:14:06 +0900

version.h の日付更新。

usa: r56931 2016-11-30 00:23:12 +0900

r56927 でメソッド定義のかっこの前の空白が警告されるようになったのにあわせて lib/matrix.rb が修正が漏れていたので警告除去しています。

kazu: r56932 2016-11-30 00:31:16 +0900

r56912 で追加した String#casecmp? と Symbol#casecmp? メソッドについて NEWS ファイルに追記しています。 [ruby-core:77375] [Feature #12786]

nobu: r56933 2016-11-30 00:34:31 +0900

r56929 の追加修正です。 clone でキーワード引数 freeze に false を渡されてエラーにするのは Bignum や Float のオブジェクトも常に freeze されているので、即値の他にこれらも判定する special_object_p() という関数を定義してこれで判定するようにしています。 [ruby-core:78308] [Feature #12979]

rhe: r56934 2016-11-30 00:48:45 +0900

標準添付ライブラリ net/http のテストが openssl のテストのユーティリティクラスに依存していたのですが openssl は upstream があるので証明書の fixture など net/http 用に別に持つようにして依存関係を解消しています。

rhe: r56935 2016-11-30 00:48:46 +0900

標準添付ライブラリ open-uri のテストでも openssl のユーティリティに依存していたのを独自に鍵情報を持つようにしています。

rhe: r56936 2016-11-30 00:48:47 +0900

標準添付ライブラリ webrick のテストでも openssl に依存していたのをやめています。

nobu: r56937 2016-11-30 01:06:54 +0900

標準添付ライブラリやテスト、benchmark スクリプトなどでメソッド定義のかっこの前の空白が入っていて r56927 の変更で警告が出るようになったので警告除去しています。

tenderlove: r56938 2016-11-30 02:06:35 +0900

rb_ivar_count() でオブジェクトインスタンス変数毎のテーブルの名前とインデックスの関係は同じクラスでは共有されているので、そのクラス毎のインスタンス変数の数は拡張される可能性があるのですが、オブジェクト毎のインスタンス変数の数は別に管理されているので、ROBJECT_IV_INDEX_TBL(obj)->num_entries を見てたため後から他のインスタンスインスタンス変数が追加されて拡張された場合に不正なメモリアクセスをする可能性がありました。ROBJECT_NUMIV(obj) でインスタンス毎の上限のほうを使うように修正しています。

インスタンス変数の管理方法が今のようにクラス毎にインデックスを共有するようになったのは結構前だったと思うのでおそらく 2.2, 2.3 でも修正が必要ですね。 [ruby-core:78403] [Bug #12988]

shugo: r56939 2016-11-30 10:22:05 +0900

テストで -> を使った lambda の記法でもかっことの間に空白があると警告が出るようになったので空白を削って警告除去しています。

nobu: r56940 2016-11-30 10:40:11 +0900

r56939 のように ->(x) { ... } のような記法の lambda の定義でも -> と () の間に空白があると警告が出るようになっていましたが、これは警告の対象にしないように変更されています。

duerst: r56941 2016-11-30 17:25:46 +0900

r56924 で Unicode の casemap で U+A64B という文字はうまく処理できていなかったのでテストを skip させていたのを特別処理を追加して修正しています。 [ruby-core:78410] [Bug #12990]

nobu: r56942 2016-11-30 22:09:50 +0900

parse.y で '{' と '}' という文字リテラルを使ってたところに open_brace, close_brace と const int の変数を定義して それを参照するようにしています。

nobu: r56943 2016-11-30 22:09:51 +0900

parse.y で "\uXXXX" のような記法の parse をする parser_tokadd_codepoint() で codepoint に対応する文字をバッファに追加する処理を parser_tokadd_codepoint() という関数に切り出して使いまわすようにしています。

hsbt: r56944 2016-11-30 22:55:02 +0900

拡張ライブラリ psych の 2.2.1 を upstream からマージしています。 1.8 以前のサポートのためのコードの除去などが行なわれているほか GC に関連した SEGV の修正も含まれているそうです。 https://github.com/ruby/psych/pull/296

hsbt: r56945 2016-11-30 23:24:12 +0900

拡張ライブラリ psych の gemspec ファイルで "psych/version.rb" を load するように書かれていたので require "psych" に置き換えています。

rhe: r56946 2016-11-30 23:41:46 +0900

openssl の upstream (https://github.com/ruby/openssl) で開発されていた 2.0.0 のブランチから差分がマージされています。 https://github.com/ruby/openssl/compare/v2.0.0.beta.2...v2.0.0

OpenSSL 0.9.7 以前のバージョンはサポートされなくなっています。

nobu: r56947 2016-11-30 23:43:43 +0900

文字列リテラルの \u{XXXX} の記法で X に不正な文字が含まれていた時のエラーメッセージが "unterminated Unicode escape" となっていたので "invalid Unicode escape" という例外メッセージが出るように修正しています。

nobu: r56948 2016-11-30 23:54:09 +0900

拡張ライブラリ openssl で警告除去のため return 文に明示的なキャストを追加しています。

2016-11-29 ruby-trunk-changes r56915 - r56927

[][]ruby-trunk-changes r56915 - r56927

今日は Net::FTP.new のオプション追加やテストの修正などがありました。

nobu: r56915 2016-11-28 22:16:00 +0900

string.c の mapping_buffer という型で最後のメンバーにサイズが 0 の配列を定義して可変長のサイズのメモリのヘッダとして使う方法を使っていましたが C90 ではサイズ 0 の配列の宣言ができないのでサイズ 1 に変更しています。

shugo: r56916 2016-11-29 11:21:50 +0900

標準添付ライブラリ net/ftp の Net::FTP#connect で OpenTimeout 例外時にも @sock を close しておくようにしています。 TLS handshake のタイムアウト時に発生する可能性があるため。

svn: r56917 2016-11-29 11:21:51 +0900

version.h の日付更新。

shugo: r56918 2016-11-29 11:33:34 +0900

r56916 の追加修正。 Net::FTP#connect で例外発生時の close 処理を Net::FTP#close の呼び出しではなく @sock.close を直接呼ぶようにしています。 Net::FTP#close だと shutdown 後 read してしまってタイムアウトするまで待たされる可能性があったので。

shugo: r56919 2016-11-29 11:47:11 +0900

標準添付ライブラリ net/ftp の Net::FTP.new に :ssl_handshake_timeout オプションを追加して :open_timeout とは別に TLS handshake のタイムアウトを指定できるようにしています。

nobu: r56920 2016-11-29 12:06:01 +0900

string.c の rb_str_casemap() で ALLOC_N() マクロを利用していたところを xmalloc() の呼び出しにおきかえています。

nobu: r56921 2016-11-29 12:06:02 +0900

test/ruby/test_keyword.rb 必須キーワード引数のテストで発生する例外を検査するのに begin ... rescue を使ってわざわざ書いてたので assert_raise_with_message が返す例外オブジェクトを使ってチェックするように修正しています。

nobu: r56922 2016-11-29 12:06:03 +0900

必須キーワード引数のテストに proc() で Proc オブジェクトを作る時にブロックパラメータとして必須キーワード引数を使った時の挙動についてテストを追加しています。

shugo: r56923 2016-11-29 17:31:39 +0900

Net::FTPTLS 対応のテストで OpenSSL::SSL::SSLSocket#accept の例外を捕捉しているところで mswin64 で Errno::ECONNRESET が発生したそうなので rescue に追加しています。

duerst: r56924 2016-11-29 17:39:57 +0900

文字列Unicode の casemap 対応のテストで \uA64B という文字はうまく処理できていないみたいなので skip するようにしています。assert_equal の引数に同じ変数を渡していたのを直したら発覚したみたいです。 [ruby-core:78410] [Bug #12990]

shugo: r56925 2016-11-29 17:44:21 +0900

標準添付ライブラリ net/ftp の Net::FTP で未初期化インスタンス変数の参照の警告除去のために initialize で初期化を追加しています。またテストではブロックパラメータによる外側の変数の shadowing の警告除去をしています。

duerst: r56926 2016-11-29 19:45:54 +0900

r56912 で追加した String#casecmp? と Symbol#casecmp? の rdoc 用コメントのサンプルのメソッド名が casecmp になっていたので ? を追加しています。

nobu: r56927 2016-11-29 19:47:43 +0900

メソッド定義の仮引数をかこむかっことメソッド名のあいだに空白があったら警告メッセージを出すようにしています。標準添付ライブラリにもそうなっていたところがあったので修正しています。