プロジェクト

全般

プロフィール

Backport(バックポート) #3722

完了

opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない

isao sano さんが約10年前に追加. ほぼ9年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2013-11-29
期日:
進捗率:

100%

予定工数:

説明

Overview (現象)

opDynamicAclRoute クラスを使用したルートの allow_empty オプションを true にセットした状態で存在しないオブジェクトに対する URL がリクエストされると、 $route->getObject() で null が返されることなく Fatal Error が発生し異常終了する。

[Fri Nov 29 16:56:45.251504 2013] [fcgid:warn] [pid 32517:tid 139863663769344] [client 115.65.29.61:64752] mod_fcgid: stderr: PHP Fatal error:  Call to a member function isAllowed() on a non-object in /home/upsilon/git/openpne3/master/lib/routing/opDynamicAclRoute.class.php on line 44, referer: https://sns.example.com/communityTopic/1  

Causes (原因)

opDynamicAclRoute::getObject() メソッド内で、parent::getObject() が null を返すことが想定していないことが原因。

  public function getObject()
  {
    $result = parent::getObject();

    if (!$role = $this->getCurrentMemberId())
    {
      $role = 'alien';
    }

    if ($result instanceof opAccessControlRecordInterface)
    {
      if (!$result->isAllowed($this->getCurrentMember(), $this->options['privilege']))
      {
        $this->handleRestriction();
      }
    }
    elseif (!$this->acl->isAllowed($this->getCurrentMemberId(), null, $this->options['privilege']))
    {
      $this->handleRestriction();
    }

    return $result;
  }

Way to fix (修正内容)

parent::getObject() が null を返した場合には何もせずそのまま null を返すように修正する。


関連するチケット 1 (0件未完了1件完了)

コピー元 OpenPNE 3 - Bug(バグ) #3507: opDynamicAclRoute クラスが allow_empty オプションの利用を想定していないWon't fix(対応せず)Youichi Kimura2013-11-29

操作

isao sano さんが約10年前に更新

  • コピー元 Bug(バグ) #3507: opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない を追加

isao sano さんが約10年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

isao sano さんが約10年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

https://github.com/openpne/OpenPNE3/pull/213
にてプルリクエストをしました

Shinichi Urabe さんがほぼ10年前に更新

  • 担当者isao sano にセット

担当を設定ください(差し戻し対応が誰か不明になるため)

Shinichi Urabe さんがほぼ10年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

#626 の修正が混入しています

isao sano さんがほぼ10年前に更新

  • ステータスRejected(差し戻し) から Accepted(着手) に変更
  • 進捗率50 から 0 に変更

isao sano さんがほぼ10年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

#626 の修正を取り除き、再度プルリクエストしました。
https://github.com/openpne/OpenPNE3/pull/237

https://github.com/openpne/OpenPNE3/pull/213
のプルリクエストは操作ミスによりclosedにしてしまった為、新しいブランチでプルリクエストしました。申し訳ありません。

Shinichi Urabe さんがほぼ10年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

isao sano さんがほぼ10年前に更新

  • 対象バージョンOpenPNE 3.8.14 から OpenPNE 3.8.x に変更

試験を行うためのテストコードが未実装のため、対象バージョンから一旦外します。

kaoru n さんが約9年前に更新

  • 対象バージョンOpenPNE 3.8.x から OpenPNE 3.8.18 に変更

Chiharu Nakajima さんがほぼ9年前に更新

  • ステータスPending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
  • 進捗率70 から 80 に変更

単体テストOK

Rimpei Ogawa さんがほぼ9年前に更新

  • ステータスPending Merge(マージ待ち) から Fixed(完了) に変更
  • 進捗率80 から 100 に変更

他の形式にエクスポート: Atom PDF