#freezeを手書きで凍結できてしまう†
- ページ: BugTrack2
- 投稿者: teanan
- 優先順位: 緊急
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2005-02-17 (木) 13:40:32
- バージョン: 1.4.5
メッセージ†
手書きで 「#freeze」 と書いても、そのページは凍結されないように対策されていますが、「#freeze()」と書くとパスワード入力なしで凍結されてしまいます。
preg_replaceの条件がまずいようです。
ご検討をお願いします。
plugin/edit.inc.php: 50,180行目付近
// 手書きの#freezeを削除
- $vars['msg'] = preg_replace('/^#freeze\s*$/im', '', $vars['msg']);
+ $vars['msg'] = preg_replace('/^#freeze(?:\(.*\))?[\s;]*/im', '', $vars['msg']);
- セミコロンはいらなかったか・・・ (^^; -- teanan
- おう、本当に凍結できる (^^; -- henoheno
- cvs:lib/func.php (1.31)
- is_freeze() を修正しました。この手の行動は予期していたのですが、is_freeze() 側のチェックすべきバイト長が一つ足りておらず、そのためにこれが問題になりえました。これで、今回問題となったパターンが書き込まれていた(ロックされていた)ページが元通りに編集できるようになります。 -- henoheno
- cvs:plugin/edit.inc.php (1.31)
- teananさんご指摘の部分を整理してコミットしました。これで、今回問題となったパターンが書き込まれることをブロックします。 -- henoheno
- 問題がまだ残っていますので再オープンします。cvs:plugin/edit.inc.php (1.31) の修正では「#freeze#freeze」と編集する操作に対して脆弱なためです。 -- Mizar
@@ -6,7 +6,7 @@
// cmd=edit
// Remove #freeze written by hand
-define('PLUGIN_EDIT_FREEZE_REGEX', '/^#freeze(?:\(.*\))?[\s;]*/im');
+define('PLUGIN_EDIT_FREEZE_REGEX', '/^(?:#freeze\s*)+/im');
function plugin_edit_action()
{
- 上のPatchでは、freezeで始まる別のプラグインがあった場合に妨害してしまう可能性がありますので、以下のような修正も提示しておきます。 -- Mizar
define('PLUGIN_EDIT_FREEZE_REGEX', '/^(?:#freeze(?!\w)\s*)+/im');
- むしろ、エラーを吐いて更新を拒絶する方が適切な処理だったかもしれません。 (^^; -- Mizar