BugTrack/2059
の編集
Top
/
BugTrack
/
2059
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
*更新衝突が検出されず上書きされてしまうことがある [#ubadb396] -ページ: [[BugTrack2]] -投稿者: [[mu]] -優先順位: 重要 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2005-04-21 (木) 20:50:44 -バージョン: ** 修正 [#c11110e3] - [[cvs:lib/html.php]] (1.31): ('string' == 0) may blind collision-detection, because 'strings' are sometimes valued as 0 (Pointed out by mu) PHPでは文字列と数値を(強引に)比較させる事は可能であるが、(文字列の型が自動的に変換された結果)数値0に評価される事があるため、意図しない結果をもたらす事がある。 http://jp2.php.net/manual/ja/language.types.string.php#language.types.string.conversion **メッセージ [#e5371196] 同時更新の衝突(コリジョン)が検出されず、 先に書かれた内容が後から書かれたもので 上書きされてしまうことがありました。 調べてみたところ、 lib/html.php の edit_form で生成されている $digest ですが、 数値比較で 0 だと判断される md5 文字列の場合 ((例えば"abcdefabcdefabcdefabcdefabcdefab"等))に 再初期化となっているのが原因ではないかと考えました。 対策コードの差分は以下の通りです。 lib/html.php // Show 'edit' form -function edit_form($page, $postdata, $digest = 0, $b_template = TRUE) +function edit_form($page, $postdata, $digest = "", $b_template = TRUE) { global $script, $vars, $rows, $cols, $hr, $function_freeze; global $_btn_addtop, $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help, $_btn_notchangetimestamp; global $whatsnew, $_btn_template, $_btn_load, $non_list, $load_template_func; global $notimeupdate; $refer = $template = $addtag = $add_top = ''; - if ($digest == 0) $digest = md5(join('', get_source($page))); + if ($digest == "") $digest = md5(join('', get_source($page))); $checked_top = isset($vars['add_top']) ? ' checked="checked"' : ''; $checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : ''; ---- -すみません、追記です。$digest の再初期化が問題になるケースは、「編集→プレビュー→再編集→書き込み」 という作業の間に他人の編集が入ってしまった場合です。他人の編集が無かったことになります。 -- [[mu]] &new{2005-04-21 (木) 20:54:25}; -お知らせありがとうございます :) デフォルト値についてはより簡潔にFALSEとさせていただきました。比較も === としました。さらに該当行の意図をはっきりさせるためにコメントを追加し、位置も若干移動しました。 -- [[henoheno]] &new{2005-04-21 (木) 23:31:26}; -- [[cvs:lib/html.php]] (1.31) -修正&コミット、そしていつもありがとうございます。 -- [[mu]] &new{2005-04-22 (金) 02:58:38}; -こちらこそ、ありがとうございました。完了としておきます :) -- [[henoheno]] &new{2005-04-23 (土) 20:42:31}; - [[BugTrack/608]] #comment
タイムスタンプを変更しない
*更新衝突が検出されず上書きされてしまうことがある [#ubadb396] -ページ: [[BugTrack2]] -投稿者: [[mu]] -優先順位: 重要 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2005-04-21 (木) 20:50:44 -バージョン: ** 修正 [#c11110e3] - [[cvs:lib/html.php]] (1.31): ('string' == 0) may blind collision-detection, because 'strings' are sometimes valued as 0 (Pointed out by mu) PHPでは文字列と数値を(強引に)比較させる事は可能であるが、(文字列の型が自動的に変換された結果)数値0に評価される事があるため、意図しない結果をもたらす事がある。 http://jp2.php.net/manual/ja/language.types.string.php#language.types.string.conversion **メッセージ [#e5371196] 同時更新の衝突(コリジョン)が検出されず、 先に書かれた内容が後から書かれたもので 上書きされてしまうことがありました。 調べてみたところ、 lib/html.php の edit_form で生成されている $digest ですが、 数値比較で 0 だと判断される md5 文字列の場合 ((例えば"abcdefabcdefabcdefabcdefabcdefab"等))に 再初期化となっているのが原因ではないかと考えました。 対策コードの差分は以下の通りです。 lib/html.php // Show 'edit' form -function edit_form($page, $postdata, $digest = 0, $b_template = TRUE) +function edit_form($page, $postdata, $digest = "", $b_template = TRUE) { global $script, $vars, $rows, $cols, $hr, $function_freeze; global $_btn_addtop, $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help, $_btn_notchangetimestamp; global $whatsnew, $_btn_template, $_btn_load, $non_list, $load_template_func; global $notimeupdate; $refer = $template = $addtag = $add_top = ''; - if ($digest == 0) $digest = md5(join('', get_source($page))); + if ($digest == "") $digest = md5(join('', get_source($page))); $checked_top = isset($vars['add_top']) ? ' checked="checked"' : ''; $checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : ''; ---- -すみません、追記です。$digest の再初期化が問題になるケースは、「編集→プレビュー→再編集→書き込み」 という作業の間に他人の編集が入ってしまった場合です。他人の編集が無かったことになります。 -- [[mu]] &new{2005-04-21 (木) 20:54:25}; -お知らせありがとうございます :) デフォルト値についてはより簡潔にFALSEとさせていただきました。比較も === としました。さらに該当行の意図をはっきりさせるためにコメントを追加し、位置も若干移動しました。 -- [[henoheno]] &new{2005-04-21 (木) 23:31:26}; -- [[cvs:lib/html.php]] (1.31) -修正&コミット、そしていつもありがとうございます。 -- [[mu]] &new{2005-04-22 (金) 02:58:38}; -こちらこそ、ありがとうございました。完了としておきます :) -- [[henoheno]] &new{2005-04-23 (土) 20:42:31}; - [[BugTrack/608]] #comment
テキスト整形のルールを表示する