ruby-trunk-changes r46413 - r46420

今日は昨日の rb_str_resize() でメモリサイズを変更していなかった不具合の修正や Array#permutation の一時メモリサイズの修正、TracePoint の不具合修正などがありました。

nobu: r46413 2014-06-12 20:33:12 +0900

r46408 で rb_str_resize() に現在と同じサイズを指定しても capa を切り詰めるように…したつもりが realloc() が呼ばれていなかったのを修正しています。 capa が len よりもある程度以上大きければ指定されたサイズ(終端文字のぶんを含む)に切りつめる realloc() を呼ぶようにしています。
あれ、でも capa が len より少しだけ大きいときはそのままなのに、その後で capa = len にしてしまっているので、実際のバッファサイズよりも capa が小さくなる可能性がありますね。小さいぶんには大きな問題はないですけど(ObjectSpace.memsize_of が不正確になるくらいか)。

tmm1: r46414 2014-06-13 09:00:03 +0900

r46410 での File.expand_path の返す文字列が大きなバッファを取っていないことを確認するためのテストに深くネストしたパスの時のテストケースも追加しています。 [ruby-core:63136] [Bug #9934]

svn: r46415 2014-06-13 09:00:17 +0900

version.h の日付更新。

nobu: r46416 2014-06-13 13:43:57 +0900

Array#permutation で一時的に確保する配列のバッファサイズを誤って大きく指定してしまっていたのを修正しています。 むむ、こんな不具合が潜んでいたとは。 [Bug #9942]

nobu: r46417 2014-06-13 17:33:58 +0900

array.c で permute0(), rpermute0(), rcombinate0() から配列の部分要素を配列につめて yield する処理を括り出して yield_indexed_values() という関数にするリファクタリング

nobu: r46418 2014-06-13 17:34:17 +0900

Array#combination のブロックの中でその Array オブジェクト自身を変更してバッファを切り詰めたり realloc すると SEGV する不具合を修正しています。一時バッファに tmpbuf() を使っていたのを ALLOCV_N() を使って直に確保するようにしたり、ary_make_shared_copy() で共有配列を作って利用するようにしています。 [ruby-core:63149] [Bug #9939]

ko1: r46419 2014-06-13 17:50:11 +0900

TracePoint の再帰チェックが悪さをして c_call のハンドラ内で throw が発生してフックの実行が飛ばされてしまうことがある不具合を修正しています。発生シナリオは複雑なのでチケット参照。 [ruby-dev:48290] [Bug #9940]

ko1: r46420 2014-06-13 18:01:21 +0900

TracePoint のテスト用に TracePoint.stat というメソッドを追加して登録されている TracePoint のフックの数などを取得できるようにして、これで TracePoint のテストの終了時にフックが残ってないかチェックするようにしています。