ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

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;