プロジェクト

全般

プロフィール

Bug(バグ) #2491

opToolkit::getRandom() に static キーワードが付いていない

Maki Takahashi12年以上前に追加. 8年以上前に更新.

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

100%

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

説明

opToolkit クラスのメソッドには static を付けるべきだが、このメソッドだけ付いていない。

確認バージョン

OpenPNE 3.7.0-dev (master)
OpenPNE 3.6.1 (stable-3.6.x)


関連するチケット

関連している OpenPNE 3 - Backport(バックポート) #2554: opToolkit::getRandom() に static キーワードが付いていない Fixed(完了) 2011-10-14
関連している OpenPNE 3 - Enhancement(機能追加・改善) #1113: Add ability to publish UID each sites for authentication in mobile (サイト毎の UID を携帯電話における認証のために発行できるようにする) Fixed(完了) 2010-05-30
関連している OpenPNE 3 - Backport(バックポート) #3389: opToolkit::getRandom() に static キーワードが付いていない Fixed(完了) 2013-09-02

関係しているリビジョン

リビジョン 8690d425 (差分)
Maki Takahashi12年以上前に追加

(fixes #2491) added static keyword to opToolkit::getRandom()

履歴

#1 Maki Takahashi12年以上前に更新

  • 説明 を更新 (diff)
  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Maki Takahashi にセット

#2 Maki Takahashi12年以上前に更新

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

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

#3 Minoru Takai12年以上前に更新

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

note-2 をレビューしました。レビューOKです。

opToolkit::getRandom() が定義された経緯を調べましたが #1113 で追加されていました。これを関連チケットとしておきました( #1113 を BP 対応することになった場合、あるいはその修正内容が参考にされた場合に、この問題があることを周知する意図も含めて)。

このメソッドを呼び出しているのは以下に示す箇所のみであり、これらは静的メソッドであることを前提としているため、この修正による副作用はない( note-2 の修正以外にこの問題に関して修正すべき箇所が他には無い)と判断できます。

$ ack 'getRandom' -aiw
lib/util/opToolkit.class.php
491:   * Licensed under The BSD License. Original is the Ethna_Util::getRandom() method.
502:  public static function getRandom($length = 64)

lib/user/opSecurityUser.class.php
183:      $rememberKey = opToolkit::getRandom();

lib/response/opWebResponse.class.php
38:    $value = opToolkit::getRandom();

plugins/opOpenSocialPlugin/apps/mobile_frontend/modules/application/actions/actions.class.php
344:    $this->tk = opToolkit::getRandom('12');
345:    $t        = opToolkit::getRandom();

補足

参考までに、なぜこのミスが生じたのか(本当にこのチケットでの修正を行なってしまっても良いのか)追ってみました。

http://redmine.openpne.jp/issues/1113#note-6 にも経緯を示しましたが、 #1113 の修正の詳細は http://co3k.org/blog/8#cookie-id で公開されています。

で、 Ethna は BSD License だったので、 Ethna のコードの一部を Apache License な OpenPNE で流用することはライセンス的に矛盾しません。そういうわけでこの Ethna_Util::getRandom() をありがたく拝借し、 opToolkit::getRandom() として利用させてもらうことにしました

とその記事にある通り、また、 opToolkit::getRandom() メソッドのコメント(以下)にもあるように、 Ethna_Util::getRandom() を参考にしていることが明記されています。

488-  /**
489-   * Generates a randomized hash (from Ethna 2.5.0)
490-   *
491:   * Licensed under The BSD License. Original is the Ethna_Util::getRandom() method.
492-   *
493-   * Copyright (c) 2004-2006, Masaki Fujimoto
494-   * All rights reserved.
495-   *
496-   * @author  Masaki Fujimoto <fujimoto@php.net>
497-   * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
498-   *
499-   * @param  int    $length  Length of a hash
500-   * @return string
501-   */
502-  public static function getRandom($length = 64)
503-  {
 :

かといって初回のセッション ID を使い回すのもどうか……と悩みに悩んで見つけたのが、 Ethna の Ethna_Util::getRandom() です。
http://git.sourceforge.jp/view?p=ethna/ethna.git;a=blob;f=class/Ethna_Util.php;h=c3ab01a60f97e667ded1b13a6cdf8faea9991e9a;hb=HEAD

この問題は #1113 での修正時点で、 Ethna_Util::getRandom() (これは PHP4 を前提としている: スコープ定義演算子 )を、 opToolkit::getRandom() として定義する際に単に static を付け忘れただけであると判断できます(oop5 static キーワード スコープ定義演算子 )。

note-2 の修正は適切であると判断します。

#4 Fumie Toyooka12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

本チケットでのテスターテストは不要と判断いたしましたので、チケット完了します。

#5 Minoru Takai12年以上前に更新

note-4 でテスト不要と書かれていますが、念のため動作テストしておきました。

$ php -r 'include("lib/util/opToolkit.class.php"); echo opToolkit::getRandom(),"\n";'

などとして実行できたため、例えば「全角スペースが紛れ込んでいた」といったミスの可能性もなさそうです。メソッドコールできることが確認できていることを示しておきます。

#6 kaoru n8年以上前に更新

  • 3.6 で発生するかUnknown (未調査) にセット
  • 3.8 で発生するかUnknown (未調査) にセット

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