操作
Backport(バックポート) #3722
完了opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない
開始日:
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 を返すように修正する。
isao sano さんが約10年前に更新
- コピー元 Bug(バグ) #3507: opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない を追加
isao sano さんが約10年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
https://github.com/openpne/OpenPNE3/pull/213
にてプルリクエストをしました
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 に変更
Chiharu Nakajima さんがほぼ9年前に更新
- ステータス を Pending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
- 進捗率 を 70 から 80 に変更
単体テストOK
Rimpei Ogawa さんがほぼ9年前に更新
- ステータス を Pending Merge(マージ待ち) から Fixed(完了) に変更
- 進捗率 を 80 から 100 に変更
操作