外部から送られてきたデータに対する、改行コードの処理などの疑問点を挙げます
システム系の昔からあるedit やpcomment などは、$vars['msg'] を使っているので、init.php で"\r" を取り除いています。
しかし、一部のプラグインでは$vars['msg'] に対してもう一度"\r" を取り除こうとしています。
// 整形: msg, 改行を取り除く if (isset($vars['msg'])) { $get['msg'] = $post['msg'] = $vars['msg'] = str_replace("\r", '', $vars['msg']); }
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" が記録されたとしても再編集して記録すれば消えてしまうので、今までは特に問題にはならなかったようだ。
そもそも改行コードは、LF("\n") 、CR("\r") 、CR+LF("\r\n") の3種類あるのに、
外部からの入力に対しての改行コードの処理は"\r" を消すというものであり、改行コードがCR でフォームのデータが渡された時のことを考えていないのではないか、
と思ったのですが、フォームのデータをブラウザがどのような規格(OS 依存?ソフト依存?)で送るかを知らないので、的外れな疑問かもしれません。
// 整形: msg if (isset($vars['msg'])) { $get['msg'] = $post['msg'] = $vars['msg'] = preg_replace("/((\x0D\x0A)|(\x0D)|(\x0A))/", "\n", $vars["msg"]); }cvs:lib/init.php (1.4 系、Rev. 1.54) からの抜粋
// 整形: msg, 改行を取り除く if (isset($vars['msg'])) { $get['msg'] = $post['msg'] = $vars['msg'] = str_replace("\r", '', $vars['msg']); }この入力データの改行コードがらみの部分が理由で、1.3 系から1.4 系への移行を促す時に妨げにならないのか、