Bug(バグ) #1606
完了
opPluginInstallTask::execute()で、モデルクラスの存在チェックが不完全
Hidenori Goto さんが約14年前に追加.
7年以上前に更新.
説明
- lib/task/opPluginInstallTask.class.phpのisSnsConfigTableExists()メソッドで、sns_configテーブルの存在チェックを行っているが、モデルの作成が行われていない場合、SnsConfigTableクラスは存在しても、Doctrine::getTableでエラーが発生する(継承元のBaseSnsConfigTableクラスが存在しないため)
- OpenPNEのインストール処理の実行前にdatabases.ymlを手作業で作成し、--redoオプションでインストーラーを実行した場合、opPluginInstallTask::execute()内のdatabases.yml存在チェックはtrueになり、その後のSnsConfigの処理が実行されてしまう
現象の再現箇所¶
- OpenPNEインストールパッケージの初期状態にて、openpne:install実行前にconfig/databases.ymlを手作業で作成する
- openpne:install --redoでインストールを実行する
- プラグインのインストール処理でエラーになる
再現するバージョン¶
OpenPNE 3.7.0-DEV (1cd3238f9fe94d0bf4cc8ba7e955e911c1573e62)
パッチ¶
添付参照
ファイル
- 対象バージョン を OpenPNE 3.7.0 にセット
- 3.6 で発生するか を Yes にセット
- 対象バージョン を OpenPNE 3.7.0 から 252 に変更
- 対象バージョン を 252 から OpenPNE 3.8.x に変更
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 担当者 を 誠二 天重 にセット
- 進捗率 を 0 から 50 に変更
- 3.8 で発生するか を Unknown (未調査) にセット
- 対象バージョン を OpenPNE 3.8.x から OpenPNE 3.8.12 に変更
- 対象バージョン を OpenPNE 3.8.12 から OpenPNE 3.8.x に変更
- 対象バージョン を OpenPNE 3.8.x から OpenPNE 3.9.0-old に変更
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
diff --git a/lib/task/opPluginInstallTask.class.php b/lib/task/opPluginInstallTask.class.php
index e4426be..ccdebdc 100644
--- a/lib/task/opPluginInstallTask.class.php
+++ b/lib/task/opPluginInstallTask.class.php
@@ -60,7 +60,7 @@ EOF;
{
try
{
- if (class_exists('SnsConfigTable'))
+ if (class_exists('SnsConfigTable') && class_exists('BaseSnsConfigTable'))
{
return Doctrine_Manager::connection()
->import
修正内容が上記のようになっていますが、 BaseSnsConfigTable という名前のクラスファイルは doctrine:build-model 実行後にも生成されない(BaseSnsConfigクラスは生成される)ので、上記の修正は間違っているものと思います。
※上記修正だと、isSnsConfigTableExists メソッドが if 分岐内を通過することがないので、ほとんど常に(build後も) false を返却するメソッドになります。
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
誠二 天重 は書きました:
[...]
修正内容が上記のようになっていますが、 BaseSnsConfigTable という名前のクラスファイルは doctrine:build-model 実行後にも生成されない(BaseSnsConfigクラスは生成される)ので、上記の修正は間違っているものと思います。
※上記修正だと、isSnsConfigTableExists メソッドが if 分岐内を通過することがないので、ほとんど常に(build後も) false を返却するメソッドになります。
上記指摘の通りだと思います
一旦修正を取り消して、プルリクエストをしてください
- ステータス を Rejected(差し戻し) から New(新規) に変更
- 担当者 を削除 (
誠二 天重)
- 進捗率 を 50 から 0 に変更
Revert したプルリクエスト取り込みました。取消については
レビューはOKです
一旦チケットは新規に戻します
- 対象バージョン を OpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更
- ステータス を New(新規) から Works for me(再現せず) に変更
他の形式にエクスポート: Atom
PDF