[PHP-dev 899]Re: mb_ereg_replaceについて
kkosako @ softbank.co.jp
kkosako @ softbank.co.jp
2003年 9月 30日 (火) 11:20:41 JST
> From: Moriyoshi Koizumi [mailto:moriyoshi @ at.wakwak.com]
> > 私もバグだと思います。
> > あまり自信はないのですが、パッチを添付します。
> > ruby-dev MLにも送ってみますが、Rubyでは問題ないということで
> > 放置されるかもしれません。
>
> パッチを試してみました。せっかく見ていただいたのに申し訳ないのですが、
> どうもうまくいっていない様子でした。別のテストケースが失敗してしまいます。
>
> そこで、私もあれからいろいろ見てみたのですが、あくまで勘ですが、
> どうも fastmap が悪さをしているように見受けられます。
問題を拡大してしまったかな?
失敗するパターンとオプションはどのようなものでしょうか?
パッチで修正した箇所は、パターンの先頭に .*があって、
Rubyのmultilline option (Perlでは 's' option)の場合には、
対象文字列の先頭からのマッチだけを試みればよい
(.*が改行文字を含めて全ての文字列にマッチするので)、
という最適化を実行するかどうか判定する部分です。
最適化の実行を止めれば(goto begbuf_matchをしない)、
正しくなるかもしれません。
if (bufp->options & RE_OPTIMIZE_ANCHOR) {
if (bufp->options&RE_OPTION_SINGLELINE) {
goto begbuf_match;
}
anchor = 1;
しかし無限ループの問題以前に、
RE_OPTION_SINGLELINEで判定していること自体が既に
間違いで、RE_OPTION_MULTILINEでなければおかしいので、
今まで問題が起きていなかったことが不思議です。
(Rubyについては、RE_OPTION_SINGLELINEを使用しないように
変更されているので、最適化が実行されないことを除いて問題は
起きない筈ですが)
--
小迫@出向中
PHP-dev メーリングリストの案内