Top/Blog/2004-12-17

2004-12-17はてなブックマーク

[Devel]PHP4.3.10でエラー Permalinkはてなブックマーク

PukiWikiのエラーログ*1が半日で30MByteになってました (^^;
エラー

unpack(): Type H: outside of string on /var/www/html/lib/func.php line 298

該当箇所

// ページ名のエンコード
function encode($key)
{
	return ($key == '') ? '' : strtoupper(join('', unpack('H*0', $key)));
}

pack.cの4.3.9→4.3.10のdiffを取ってみると下記のような箇所があり、ここでinputposが-1になっているため、エラーが出ているみたいです。

@@ -820,6 +832,10 @@
 				}
 
 				inputpos += size;
+				if (inputpos < 0) {
+					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: outside of string", type);
+					inputpos = 0;
+				}
 			} else if (arg < 0) {
 				/* Reached end of input for '*' repeater */
 				break;

運用上は特に問題ないみたいなので、php_error_docrefの行をコメントアウトしちゃいました (^^; (ダメ人間)


追記(04/12/22):PHP 4.3.10 Release Announcement のCAN-2004-1018が原因で修正された箇所かも。
関連:SecuriTeam.com ™ (Multiple Vulnerabilities within PHP 4/5 (pack, unpack, safe_mode_exec_dir, safe_mode, realpath, unserialize))


追記(04/12/30):PukiWiki-dev:BugTrack/767で検討中の模様。


こんな感じに対処するようにとのことです。CVS版は修正済み。

--- func.php.orig	2004-08-07 00:39:52.000000000 +0900
+++ func.php	2004-12-30 16:47:06.000000000 +0900
@@ -243,7 +243,7 @@
 // ページ名のエンコード
 function encode($key)
 {
-	return ($key == '') ? '' : strtoupper(join('', unpack('H*0', $key)));
+	return ($key == '') ? '' : strtoupper(bin2hex($key));
 }
 
 // ページ名のデコード
  • (反応はや!)
    Posted by henoheno at 2004-12-30 (木) 14:05
  • えへへ。年末暇なもんで :D
    Posted by きゅーこん at 2004-12-30 (木) 16:27
*1 PukiWiki-dev:PukiWiki/1.4/ちょっと便利に/エラーログをファイルに出力
差分 一覧