PHP 4.4.9 で修正されていない mbstring 関連のバグをまとめてみました

リストに5項目(5.〜9.)を追加しました(2008.11.09)。

2008.08.08 に PHP4 系の最終版である PHP 4.4.9 がリリースされました。今後は、PHP 4.x はリリースされることはなく、最新の PHP 5.x に移行することが推奨されています。
同じ日にあった PHP4 送別会に参加してきたのですが、アンケートでは、まだ PHP 4.x を使い続ける方が多いようです。

だからという訳ではないのですが、PHP 4.4.9 でどのくらい mbstring 関連の既知のバグが修正されずに残っているのか気になりましたので、比較的重要だと思われるバグを知っている範囲でまとめてみました。

  1. mb_ereg()、mb_ereg_replace() で UTF-8 の一部の文字がマッチしない
  2. Apache モジュール版を使用している場合、.htaccess や ini_set() で設定した mbstring の内部変数が別のリクエストに影響する
  3. Apache モジュール版を使用している場合、"auto" の内部で扱われるエンコーディングリストが別のリクエストに影響する
  4. mb_ereg() の第1引数に不正な値(NULL, FALSE, 空文字列)を入力しても成功する
  5. mb_check_encoding()の第1引数にNULLバイトから始まる文字列を入力するとTUREを返す
  6. mb_strtoupper()、mb_strtolower() の第2引数に不正なエンコーディングを指定すると不要なエラーメッセージが出力される
  7. mb_strrpos() の第3引数に負の値を指定するとバイト単位で扱われる
  8. mb_strpos() 文字列境界チェックが文字数単位ではなくバイト単位で行われる
  9. mb_check_encoding()、mb_convert_encoding() でエンコーディングに”HTML-ENTITIES”を指定し、文字列(第1引数)に不正な値を入力すると PHP がクラッシュすることがある

詳細は以下の場所にまとめました。興味があれば参照してください。

他に把握しているのは、PHP 5.2.6 で修正されたバグの多くと、現在 PHP-dev で議論されているバグの多くは PHP 4.4.9 でも残っています。
PHP-dev で議論されているバグについては、後で追加する予定ですが、他にも間違いを見つけた方やもっと重要なバグを知っている方がおられましたら是非教えてください。追加しました(2008.11.09)。

ただ、このあたりの mbstring 関連のバグを見ただけでも PHP 4.x を使い続けるのは厳しそうな気がします。