preg/mb_ereg 系関数の戻り値がチェックされていない

  • ページ: BugTrack2
  • 投稿者: bee
  • 優先順位: 低
  • 状態: 提案
  • カテゴリー: 本体バグ
  • 投稿日: 2016-11-27 (日) 09:42:00
  • バージョン:

メッセージ

preg/mb_ereg 系関数は NULL を返すことがあります。

特に preg_replace/preg_replace_callback が深刻で

$string = preg_replace($pattern, $replacement, $string);

の場合、$string が置換後の文字列ではなく NULL に置き換わっているかもしれません。
NULL は "" にキャストされるため「なぜか表示されない」という挙動になります。

例:

  • preg_replace_callback に巨大なパターンを渡すと NULL が返ってくる(関連: BugTrack2/399
  • 廃止された /e 修飾子を使うと #contents が出力されない(1.5.1 で修正済み)

また、/u 修飾子を使う場合、$string に不正な UTF-8 シーケンスが含まれている場合は NULL を返すそうです。
qiita.com/HikaruYokogoshi/items/6f96bc209d59ae44c802#comment-777764249f93a3a94b04

すべての箇所で NULL チェックをするのは難しいので、htmlsc() に相当する関数を作ったほうがよいと思うのですがどうでしょうか?


  • NULLチェックは必要ということですね。ただhtmlscほど実際に問題になるケースは少ないと思うので(動的に巨大なpatternを利用するようなところ)都度戻り値チェックをするのがよいのかな、と思います。NULLが返ってきたときの適切な処理も場所によって違いそうです -- umorigu 2016-11-27 (日) 15:57:08


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-27 (日) 15:57:08
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.174 sec.

OSDN