[PHP-dev 576] Re: Fwd: Re: [PHP-DEV] mbstring and 4.3.0

Moriyoshi Koizumi php-dev@php.gr.jp
Wed, 13 Nov 2002 22:22:10 +0900


小泉です。

今回の件はオーバーロード自体のバグではなかったにもかかわらず、それにかこつけ
られてしまったのが残念ですね。

Rui Hirokawa <rui_hirokawa@ybb.ne.jp> wrote:

> 
> 廣川です。
> 
> 今にして思うと、関数オーバーローディングはconfigureのフラグで
> 明確に無効にできるようにしておくべきだったかもしれません。
> ただ、mail()関数を無効にした実装があるとは知りませんでした。
> 

さて、指摘のあった現象を、Ilia さんのレポートを下に分析してみましたので、今
後の参考になれば、と思い、以下に書いておきます。

mail() など 関数エントリがハッシュの中に見つからないとき
に、php_error_docref() でエラーを出していますが、このとき、エラーの種類が 
E_ERROR だと、php_error_cb() 内で zend_bailout() を呼び出して、(longjmp で) 
スクリプトの実行を強制的に中断してしまいます。(詳細については、zend.h の 
zend_try, zend_catch, zend_end_try マクロを参照してください) このときに、
RINIT の段階では、ある executor_globals(EG) の メンバ が初期化されていないこ
とで(これはまだ特定できていません…すみません) double-free が起こり、メモリ
チャンクが破壊されメモリマネージャが segfault してしまうようなのです。

つまり、現状では RINIT の中で php_error 系を使うのは推奨されないということの
ようなのです。E_WARNING だともちろん bail out しませんから、該当するエラーは
起きないというわけです。

> 残念ながら一歩後退という感じですが、
> mbstringに関する議論を見ていると、コアな開発者の中にも自分が使わないものは
> たとえ他の人に有用でもいらないという人がけっこういるような印象を受けます。


mbstring を普段使わないからこそ、あちらの方々はちょっとしたバグで神経質にな
るみたいですね。すぐ数の問題に帰結したがるのも、CJKV文化圏の開発者が少ないこ
とを知ってのことでしょう :(

> とはいっても、国際化という流れに正面から反対できる人はいない
> でしょうから、今回の件を教訓として、PHP5に向けて標準モジュールの方に
> 実装を移すということも含めて再スタートできればと思います。

mbstring に関しては日本語以外の言語への対応を強化したほうがいいと思います。
テストケースを作っていてわかりましたが、まだまだ改良の余地があります。

また、たいした知恵じゃないですが、mbstring に依存しない形で、i18n フレームワ
ークというものを提案することを考えています。構造体による関数ポインタのテーブ
ルを設けて、それを API として、php のどの拡張モジュールからもマルチバイト文
字に留意した substr や strlen が使えるようになるというものです。これにより、
おそらく現在 sf.jp で進行中のプロジェクトの移行も容易になるのではないかと考
えていますがいかがでしょう?

# sf.jp のものは、4.3.0 リリース後に早い段階でブランチを作って、少しづつ
# マージしていったほうがいいと思います。

そして、その第一段階として、iconv を使って、substr, strpos, strrpos, 
substr_count の等価関数を書いてみました。もしご興味ありましたら、私個人当て
にメールをください。パッチをお送りします。もしくは適当な場所にアップロードし
ます。


> On Wed, 13 Nov 2002 14:37:26 +0900
> Moriyoshi Koizumi <moriyoshi@at.wakwak.com> wrote:
> 
> > 小泉です。
> > 
> > mail() がないとおかしな動作をする、というバグは直したつもりだっ
> > たのですが、報告によればまだ segfault するみたいですね。
> > 
> > 
> > 
> > …しかし、リリース前にこのバグについて触れるっていうのは用意周到だな、
> > と勘ぐってしまいます。
> > 
> > コミットする回数をコントロールしていたつもりだったのですが、さらに
> > バグが多いという印象を与えるだけになってしまいました。
> > デフォルトから外されたのは残念です。
> > 
> > # でも、もう言うだけムダでしょう。
> 
> 
> -- 
> -----------------------------------------------------
> Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
>              <hirokawa@php.net>
> _______________________________________________
> PHP-dev mailing list
> PHP-dev@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-dev