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));
}
// ページ名のデコード
Comments
- (反応はや!)
Posted by henoheno at 2004-12-30 (木) 14:05
- えへへ。年末暇なもんで
Posted by でぃあばぁ at 2004-12-30 (木) 16:27
