プロジェクト

全般

プロフィール

Bug(バグ) #1944

完了

仮登録状態でメンバープロフィールページにアクセスするとFatal Error

Mutsumi Imamura さんが13年以上前に追加. 約9年前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-03-07
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

概要

OpenPNE-3.6.x 以降で、認証が不要なページ(外部公開コンテンツのページ)に仮登録中にアクセスすると、その一部のページで Fatal Error が発生する。

例えば、次の手順でエラーの発生を確認できる。

  1. SNSから招待状(新規登録メール)をユーザ A に送る
  2. ユーザ A が、その招待状の登録用URLにアクセスする
  3. プロフィール入力フォームのあるページへ遷移する
  4. その状態で(他のページにアクセスせずに) member/1 にアクセスする

主なロールとして、以下の状態がある。

  • ログイン中メンバー
  • 仮登録中メンバー
  • 非ログインユーザ

権限があるロールかを確認するために opSercurityUser::getMember() の返り値を用いている箇所(※)があるが、そこでは getMember() が Member オブジェクトか opAnonymousMember オブジェクトを返すことを前提としている。しかし仮登録中である場合には getMember() は false が返っているため Fatal Error が生じている。

  • ※ opDynamicAclRoute::getObject() : 39 行目の $this->getCurrentMemner() では Member オブジェクトかそのサブクラスのオブジェクトが返ることを期待している
    lib/routing/opDynamicAclRoute.class.php
    
    37-    if ($result instanceof opAccessControlRecordInterface)
    38-    {
    39-      if (!$result->isAllowed($this->getCurrentMember(), $this->options['privilege']))
    

また、「ログイン中メンバー」であることを確認するために opSecurityUser::getMemberId() を用いている箇所があるが、「仮登録中メンバー」であっても member_id が取得できてしまうため、権限を正しく判定できていない。

修正方針

opSecurityUser::getMember(), opSecurityUser::getMemberId() が返す値の仕様を変更する。

詳細は note-16 以降を参照。

対象バージョン

  • stable-3.6.x ブランチ
  • master ブランチ

3.4.x 以前は外部公開機能がなく 3.6.x 以降と事情が異なるため、この問題の対象ではない(仮に似た問題があったとしても別のものと考えたほうがよい)。

チケット作成時の内容

仮登録状態でメンバープロフィールページにアクセスするとFatal Error

現象

OpenPNE-3.6beta8 で、仮登録状態でメンバープロフィールページにアクセスすると Fatal Error が発生する。

Catchable fatal error: Argument 1 passed to opDoctrineRecord::isAllowed() must be an instance of Member, boolean given, 
called in /home/imamura/sns/36x.bughunt.uh-openpne5.pne.jp/lib/routing/opDynamicAclRoute.class.php on line 34 and 
defined in /home/imamura/sns/36x.bughunt.uh-openpne5.pne.jp/lib/util/opDoctrineRecord.class.php on line 154

再現手順

  1. SNSから招待状(新規登録メール)をユーザ A に送る
  2. ユーザ A が、その招待状の登録用URLにアクセスする
  3. プロフィール入力フォームのあるページへ遷移する
  4. その状態で(他のページにアクセスせずに) member/1 にアクセスする

再現バージョン

  • OpenPNE3.6beta8 で確認、 master でも確認
  • OpenPNE3.0、3.2、3.4では再現しません。

OpenPNE-3.4.x 以前では再現しません。


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

関連している OpenPNE 3 - Backport(バックポート) #2199: 仮登録状態でメンバープロフィールページにアクセスするとFatal ErrorFixed(完了)Maki Takahashi2011-06-10

操作
関連している OpenPNE 3 - Bug(バグ) #2285: 仮登録中のユーザーで公開範囲外のガジェットが表示されるInvalid(無効)Minoru Takai2011-07-21

操作
関連している OpenPNE 3 - Bug(バグ) #1182: 携帯でSNS強制退会直後にアクセスするとCredentials Required画面が表示されるFixed(完了)Shinichi Urabe2010-06-18

操作

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