Top/Blog/2004-12-17

2004-12-17 の変更点はてなブックマーク


#author("2017-11-20T22:37:05+09:00","default:admin","admin")
**&tag(Devel);PHP4.3.10でエラー [#ia9ddae47]

PukiWikiのエラーログ(([[PukiWiki-dev:PukiWiki/1.4/ちょっと便利に/エラーログをファイルに出力]]))が半日で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>http://jp2.php.net/release_4_3_10.php]]
のCAN-2004-1018が原因で修正された箇所かも。~
関連:[[SecuriTeam.com &#8482; (Multiple Vulnerabilities within PHP 4/5 (pack, unpack, safe_mode_exec_dir, safe_mode, realpath, unserialize))>http://www.securiteam.com/unixfocus/6W00F1PC0E.html]]~

~
追記(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));
  }
  
  // ページ名のデコード

#blognavi(Blog)


-- (反応はや!) &br;
RIGHT:&size(10){Posted by henoheno at 2004-12-30 (木) 14:05 };
-えへへ。年末暇なもんで :D &br;
RIGHT:&size(10){Posted by でぃあばぁ at 2004-12-30 (木) 16:27 };
RIGHT:&size(10){Posted by きゅーこん at 2004-12-30 (木) 16:27 };
差分 一覧