form でtextarea を使って得た値への改行コードの処理について

メッセージ

外部から送られてきたデータに対する、改行コードの処理などの疑問点を挙げます



改行コードの処理を2重にしている

システム系の昔からあるedit やpcomment などは、$vars['msg'] を使っているので、init.php で"\r" を取り除いています。
しかし、一部のプラグインでは$vars['msg'] に対してもう一度"\r" を取り除こうとしています。

cvs:plugin/insert.inc.php (1.15)

function plugin_insert_action()
{
	global $script, $vars, $cols, $rows;
	global $_title_collided, $_msg_collided, $_title_updated;

	if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
	if (! isset($vars['msg']) || $vars['msg'] == '') return;

	$vars['msg'] = preg_replace('/' . "\r" . '/', '', $vars['msg']);

cvs:plugin/memo.inc.php (1.16)

function plugin_memo_action()
{
	global $script, $vars, $cols, $rows;
	global $_title_collided, $_msg_collided, $_title_updated;

	if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
	if (! isset($vars['msg']) || $vars['msg'] == '') return;

	$memo_body = preg_replace('/' . "\r" . '/', '', $vars['msg']);


改行コードの処理を行っていない物がある

$vars['msg'] 以外のものは、改行コードの処理そのものをしていない*1ので、フォームでtextarea を使っているbugtrack や、tracker は"\r" をそのままページに記録してしまう可能性がある*2
更新衝突時の差分作成に関しては、lib/diff.php で改行コードの処理をしているし、"\r" が記録されたとしても再編集して記録すれば消えてしまうので、今までは特に問題にはならなかったようだ。



改行コードの処理がなぜ「"\r" を消す」なのか

そもそも改行コードは、LF("\n") 、CR("\r") 、CR+LF("\r\n") の3種類あるのに、
外部からの入力に対しての改行コードの処理は"\r" を消すというものであり、改行コードがCR でフォームのデータが渡された時のことを考えていないのではないか、
と思ったのですが、フォームのデータをブラウザがどのような規格(OS 依存?ソフト依存?)で送るかを知らないので、的外れな疑問かもしれません。




*1 input_filter() でしているstr_replace() を使った置換えは"\0" のみ
*2 paraedit を使っている人はedit の$vars['original'] も対象

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

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.169 sec.

OSDN