Bug(バグ) #2491
完了opToolkit::getRandom() に static キーワードが付いていない
100%
説明
opToolkit クラスのメソッドには static を付けるべきだが、このメソッドだけ付いていない。
確認バージョン¶
OpenPNE 3.7.0-dev (master)
OpenPNE 3.6.1 (stable-3.6.x)
Maki Takahashi さんが約13年前に更新
- 説明 を更新 (差分)
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Maki Takahashi にセット
Maki Takahashi さんが約13年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 8690d425008c51ed8ce8b84c356d194992ad773f で適用されました。
Minoru Takai さんが約13年前に更新
- ステータス を 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 の修正は適切であると判断します。
Fumie Toyooka さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
本チケットでのテスターテストは不要と判断いたしましたので、チケット完了します。
Minoru Takai さんが約13年前に更新
note-4 でテスト不要と書かれていますが、念のため動作テストしておきました。
$ php -r 'include("lib/util/opToolkit.class.php"); echo opToolkit::getRandom(),"\n";'
などとして実行できたため、例えば「全角スペースが紛れ込んでいた」といったミスの可能性もなさそうです。メソッドコールできることが確認できていることを示しておきます。