#author("2016-11-27T15:58:17+09:00","","")
#author("2016-11-29T07:59:57+09:00","","")
* preg/mb_ereg 系関数の戻り値がチェックされていない [#e775a32c]

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

** メッセージ [#x04e2dc1]
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]] &new{2016-11-27 (日) 15:57:08};
- NULLチェックは必要ということですね。ただhtmlscほど実際に問題になるケースは少ないと思うので(動的に巨大なpatternを利用するようなところ)都度戻り値チェックをするのがよいのかな、と思います。NULLが返ってきたときの適切な処理も場所によって違いそうです -- [[umorigu]] &new{2016-11-27 (日) 15:57:08};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.050 sec.

SourceForge