Project

General

Profile

Bug(バグ) #2491

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

Added by Maki Takahashi almost 8 years ago. Updated almost 4 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2011-10-14
Due date:
% Done:

100%

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

Description

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

確認バージョン

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


Related issues

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

Associated revisions

Revision 8690d425 (diff)
Added by Maki Takahashi almost 8 years ago

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

History

#1 Updated by Maki Takahashi almost 8 years ago

  • Description updated (diff)
  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Maki Takahashi

#2 Updated by Maki Takahashi almost 8 years ago

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

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

#3 Updated by Minoru Takai almost 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 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 Updated by Fumie Toyooka almost 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

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

#5 Updated by Minoru Takai over 7 years ago

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

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

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

#6 Updated by kaoru n almost 4 years ago

  • 3.6 で発生するか set to Unknown (未調査)
  • 3.8 で発生するか set to Unknown (未調査)

Also available in: Atom PDF