2004-12-17
[Devel]PHP4.3.10でエラー
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
- えへへ。年末暇なもんで
Posted by きゅーこん at 2004-12-30 (木) 16:27