こんにちは、なかむら(う)です。

In message "[ruby-dev:36744] Re: Assertion failed in array.c on mswin32 Ruby (trunk)"
    on Oct.15,2008 18:28:18, <matz / ruby-lang.org> wrote:
> |直感に頼らないで真面目に原因を考えてみたところ、RESIZE_CAPA()
> |の中で、capacityがlenより短い時にas.aryの終端を越えてコピーを
> |してしまうことがある、ということのようです。
> |例えば以下のパッチのようにすることが考えられますが、capacity
> |がlenより短い場合に何が起こるべきかは考えないといけないように
> |思います([BUG]とか)。
> 
> 本来的な話をするとcapacityがlenよりも短いのはバグだと思うの
> で、そのバグをつぶす必要があると思いますが。

一つ前のパッチ([ruby-dev:36735])がそのバグを潰しているパッチ
です。
で、lenより短いcapacityでRESIZE_CAPA()を呼び出すのがバグであ
るならそれをコードで表現すればよいと思うのですが、わざわざ該
当部には元々lenを変更するコードも入っているため、元のコードの
意図がわからないので確認したかったのです。

で、先のパッチはlenを変更しようとしてるんだからRESIZE_CAPA()
に必要ならばlenを変更する機能も与えようとしてるんだと解釈して
作成したわけですが、

> とりあえず、このパッチをコミットしていただいても構いません。

私の好みを言えば、[BUG]で殺す方がいいんじゃないかと思います。
# 元のコードを書いたyuguiさんの趣味を尊重するとassert()ですか
# ね。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>