まつもと ゆきひろです

In message "[ruby-dev:14754] regex.c について"
    on 01/09/08, Osamu Shigematsu <shige / ravi.ne.jp> writes:

|はじめまして。こちらでは初めての発言となります。

はじめまして。

|DOUBLE_STACK というマクロが定義されているのですが、この中で、
|xmalloc (実体は malloc?) や、xrealloc を呼び出し、
|その失敗を一切確認していません。

xmallocはmallocを実行し、失敗すればGCを起動後再mallocし、そ
れでも失敗したら例外を発生するルーチンです。ですから、すくな
くともRubyに関するかぎりは確認は不要なんです。

|また、realloc() の使い方自体を間違えていると思われる箇所がありました。
|
|re_compile_pattern の中ですが、realloc は最初の引数、
|古いポインタが null の場合には、malloc と等価ですから、
|if(bufp->buffer) のように確認する意味はありませんし、

あ、これはANSI Cのレベルで決まってましたっけ。これは確かに不
要ですね。

|realloc は失敗すると null を返しますが、元々渡したポインタは、
|何もされませんから (もちろん解放もされない)、そのままリークすると思います。

これは上述の通りxreallocは失敗しません。