1. NetCommons2 新着情報のバグ

投稿日時: 2017/03/08 永原 篤

こんにちは。
株式会社オープンソース・ワークショップの永原です。

NetCommons2 新着情報のバグを見つけたので、とりあえずここにメモ。

発現する条件は以下

  • 新着情報を配置している。
  • 新着情報に日誌を表示している。(他のモジュールでも起こり得そう)
  • 日誌をブロック移動した。

この時、移動した日誌ブロックの記事をクリックすると、

"入力値が不正です。不正にアクセスされた可能性があります。"

とエラーになって、表示できないことがあります。

これは、NetCommons2 の新着情報モジュールのバグです。

  1. ログインしていること。
  2. ブロック移動前に新着から該当記事にリンクすること。
  3. この時点で、そのユーザが該当記事を見たという履歴ができる。
  4. 履歴データはroom_id を持っていない。
  5. ブロックを移動する。
  6. 再び新着をクリック。
  7. 履歴があるかどうかを判定する際、room_id も含めて確認するので、履歴なしと判定。
  8. 履歴をINSERTしようとするが、データベースのキーはroom_id がないので、重複エラーになる。

ということで、以下のように修正。

webapp/modules/whatsnew/components/Action.class.php

	function setRead() 
	{
    	$_user_id = $this->_session->getParameter("_user_id");
		if (empty($_user_id)) {
			return true;
		}
		$whatsnew = $this->_request->getParameter("whatsnew");
		if (empty($whatsnew)) {
			return false;
		}

		// 新着の既読確認に romm_id が含まれていたので、削除。by nagahara@opensource-workshop.jp
		// リンク先のブロックをルーム移動した際、エラーになる。
		// エラーは、ここで romm_id を含んで既読確認しているのに、既読データのINSERT は romm_id なしで行おうとするため。
		$params = array(
			"whatsnew_id"=>$whatsnew["whatsnew_id"], 
			"user_id" => $_user_id
		);
/*
		$params = array(
			"whatsnew_id"=>$whatsnew["whatsnew_id"], 
			"user_id" => $_user_id,
			'room_id' => $whatsnew['room_id']
		);
*/