Bug(バグ) #3925
タスクが異常終了した場合の終了コードが適切でない
Start date:
2017-03-09
Due date:
% Done:
100%
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
Description
Overview (現象)¶
opPlugin:install など一部のタスクは異常終了した場合でも終了コードが 0 を返しており、スクリプト等で異常終了を検知することができない。
プロセスの終了コードは慣例に従い、正常終了では 0 を、異常終了では 0 以外(通常は 1 )を返すべきである。
(sh などの if コマンドの構文でも、終了コードが 0 の場合に then 以降のコマンドを実行すると定義している)
$ /usr/bin/php ./symfony opPlugin:install opMessagePlugin >> plugin installing plugin "opMessagePlugin" >> sfPearFrontendPlugin downloading opMessagePlugin-1.0.0.tgz ... >> sfPearFrontendPlugin Starting to download opMessagePlugin-1.0.0.tgz (34,163 bytes) >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin . >> sfPearFrontendPlugin ...done: 34,163 bytes >> sfPearFrontendPlugin could not extract the package.xml file from >> sfPearFrontendPlugin "/home/upsilon/git/openpne3/v3.6/cache/.pear/opMessagePlugin-1.0.0.tgz" >> sfPearFrontendPlugin Download of "http://get.openpne.jp/opMessagePlugin-1.0.0.tgz" >> sfPearFrontendPlugin succeeded, but it is not a valid package archive >> sfPearFrontendPlugin Invalid or missing remote package file Plugin "opMessagePlugin" installation failed: $ echo $? 0
ここで表示されているエラーは #3918 のもので、当チケットの問題とは関係ない。
Causes (原因)¶
opPluginInstallTask::execute()
メソッドでは異常終了時に return false;
する実装となっている。
} catch (sfPluginException $e) { $this->logBlock($e->getMessage(), 'ERROR'); // ...snip... return false; }
sfTask::execute()
の戻り値は boolean 型ではなく integer 型を返すことが想定されており、上記のように boolean 型の値を返してしまうと PHP の 型変換の規則 に従って false
は 0
に変換されてしまう。
これが原因で、タスクの異常終了時に終了コードが 0 になっていた。
Way to fix (修正内容)¶
sfTask::execute()
を実装するクラスで return false;
を記述している箇所を return 1;
に置き換える。
Subtasks
History
#1
Updated by isao sano almost 7 years ago
- Status changed from New(新規) to Accepted(着手)
- Assignee set to isao sano
#2
Updated by isao sano almost 7 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
https://github.com/openpne/OpenPNE3/pull/428
にてプルリクエストしました。
#3
Updated by kaoru n over 6 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
- Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0
対象バージョン変更により修正内容の確認が必要であるため差し戻します。
#4
Updated by Youichi Kimura over 6 years ago
- Related to Backport(バックポート) #4169: タスクが異常終了した場合の終了コードが適切でない added
#5
Updated by Youichi Kimura over 6 years ago
- Related to Backport(バックポート) #4170: タスクが異常終了した場合の終了コードが適切でない added
#6
Updated by isao sano almost 6 years ago
- Status changed from Rejected(差し戻し) to Accepted(着手)
- % Done changed from 50 to 0
#7
Updated by isao sano almost 6 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
https://github.com/openpne/OpenPNE3/pull/501 にてプルリクエストしました。
#8
Updated by Rimpei Ogawa almost 6 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
#9
Updated by kaoru n almost 6 years ago
- Target version changed from OpenPNE 3.9.0 to OpenPNE-3.9.1
#10
Updated by kaoru n over 5 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
マージしました