strrpos関数とmb_strrpos関数の挙動の違い(続き)
昨日の件ですが。よく見てみたらバグってました。_| ̄|○
正にタコさんクオリティ。。。調子にのってゴメンナサイ。
いきなり「haystack.len」に結果を代入してしまうと「needle.len」が長すぎた場合に本来の「haystack.len」よりも大きな結果になってしまう。。。という下らないオチ。
今まで上手く動いてたのが気になるが。。。バグってる部分を補正するタコさんパッチ。
--- php-5.1.2/ext/mbstring/mbstring.c,orig 2006-02-27 11:17:53.000000000 +0900 +++ php-5.1.2/ext/mbstring/mbstring.c 2006-02-28 08:31:47.000000000 +0900 @@ -1655,7 +1655,10 @@ if (offset < 0) { RETURN_FALSE; } - haystack.len = offset + needle.len; + offset = offset + needle.len; + if (offset < haystack.len) { + haystack.len = offset; + } offset = 0; } else if (offset > haystack.len) { RETURN_FALSE;