Project

General

Profile

Actions

Bug(バグ) #3507

closed

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

Added by Youichi Kimura almost 11 years ago. Updated over 7 years ago.

Status:
Won't fix(対応せず)
Priority:
Normal(通常)
Target version:
Start date:
2013-11-29
Due date:
% Done:

0%

Estimated time:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

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 を返すように修正する。


Related issues 2 (0 open2 closed)

Copied to OpenPNE 3 - Backport(バックポート) #3721: opDynamicAclRoute クラスが allow_empty オプションの利用を想定していないFixed(完了)isao sano2013-11-29

Actions
Copied to OpenPNE 3 - Backport(バックポート) #3722: opDynamicAclRoute クラスが allow_empty オプションの利用を想定していないFixed(完了)isao sano2013-11-29

Actions
Actions #1

Updated by Youichi Kimura almost 11 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 b535a4d399ce736d1c2cd6fc61acfcba1e37cf5c で適用されました。

Actions #2

Updated by isao sano about 10 years ago

Actions #3

Updated by isao sano about 10 years ago

Actions #4

Updated by Shinichi Urabe almost 10 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70
Actions #5

Updated by Youichi Kimura about 9 years ago

当チケットでの修正に対するテストコードを作成してPull Requestしました。
https://github.com/openpne/OpenPNE3/pull/263

正常に実行されれば下記のように結果が出力されます。

$ php test/unit/routing/opDynamicAclRouteTest.php
(省略)
1..1
# `allow_empty` option
ok 1 - ->getObject() returns null if the object does not exist
# Looks like everything went fine.
Actions #7

Updated by kaoru n over 7 years ago

  • Status changed from Pending Testing(テスト待ち) to Won't fix(対応せず)
  • Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0
  • % Done changed from 70 to 0

OpenPNE 3.8.18 にて対応済みであったため、対応せずとします。

Actions

Also available in: Atom PDF