Warning: unpack(): Type H: outside of string (with PHP 4.3.10) †
- ページ: BugTrack
- 投稿者: tokiwa?
- 優先順位: 普通
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2004-12-22 (水) 10:31:04
- バージョン: 1.4.4
unpack in PHP4.3.10 †
PHP4.3.10にするとPukiWiki1.4.4の"差分を削除"を行うとunpack(func.phpのencode関数内)で"Warning: unpack(): Type H: outside of string)"が出でます。ただencode関数を呼ぶのdiffプラグインだけじゃないので、なぜこの場合だけ警告がでるのかわかりません。
これと関係があるのかもしれませんが、次のようなNoticeもでました。"Notice: Undefined index: plugin in ...\pukiwiki\skin\pukiwiki.skin.ja.php"
確認お願いします。
現象が起きた環境は Windows2000SP4, Apache2.0.52, PHP4.3.10, PukiWiki1.4.4 です。
- 同様の症状が起きていました(cubic9.com:Blog/2004-12-17)。PHP 4.3.10 Release Announcementの「CAN-2004-1018 - integer overflow/underflow in pack() and unpack() functions.」の影響かと思われます。 -- でぃあばぁ
- 確認しました。場所で言うとPHPの ext/standard/pack.c のようですね -- henoheno
- で対策は?その都度error_reporting? -- haha?
- error_reporting(E_ALL) は対策ではありません :) さて、手元の環境を 4.3.10 にした結果、素の 1.4.4_php5 + error_reporting(E_ALL) にて最初から上記Warningが出ることを確認しましたので、ちょっと検討します。*1 -- henoheno
Warning: unpack(): Type H: outside of string in /pukiwiki-1.4.4_php5/lib/func.php on line 246
- 「差分の削除」でだけ上記Warningが出る理由は、それを担当している関数 plugin_diff_delete() の先頭に error_reporting(E_ALL) が埋め込まれていたためでしょう。(現在のCVS版からは削除されています) -- henoheno
- phpBB: PHP4.3.10に伴う警告表示に対処しました
- とりあえず unpack()ではなく bin2hex () を使え、ということになりそうですね。 -- henoheno
- unpack() が上記のWarningを出す様になった経緯は、推測でしかありませんが、PHPにおけるunpack()側の「 PHP は内部的に整数を符号付で保持します。 大きな値の unsigned long を切出した場合、PHP の内部で保持された値は、 同じ大きさの符号付き整数となり、符号無しを指定して切出された場合でも 結果は負の数となります。」(マニュアルより)といった様な今までの内部処理的な都合と、integer overflowを強制的に止める(負になった値を強制的に0にするついでにWarningを出す)処理を追加した都合によるものではないかと思っています。 -- henoheno
- cvs:lib/func.php (1.21)
- お疲れ様です。報告しっぱなしですみませんでした (^^; -- でぃあばぁ
- いえいえ、前情報あればこそです :) -- henoheno
- 本題の件が終了しているようなので完了にしておきます。 -- Ratbeta?