Project

General

Profile

Bug(バグ) #3925

タスクが異常終了した場合の終了コードが適切でない

Added by Youichi Kimura over 3 years ago. Updated over 1 year ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
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 の 型変換の規則 に従って false0 に変換されてしまう。
これが原因で、タスクの異常終了時に終了コードが 0 になっていた。

Way to fix (修正内容)

sfTask::execute() を実装するクラスで return false; を記述している箇所を return 1; に置き換える。


Subtasks

Backport(バックポート) #4169: タスクが異常終了した場合の終了コードが適切でないFixed(完了)isao sano

Backport(バックポート) #4170: タスクが異常終了した場合の終了コードが適切でないFixed(完了)isao sano

History

#1 Updated by isao sano over 2 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to isao sano

#2 Updated by isao sano over 2 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 2 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 almost 2 years ago

#5 Updated by Youichi Kimura almost 2 years ago

#6 Updated by isao sano over 1 year ago

  • Status changed from Rejected(差し戻し) to Accepted(着手)
  • % Done changed from 50 to 0

#7 Updated by isao sano over 1 year 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 over 1 year ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#9 Updated by kaoru n over 1 year ago

  • Target version changed from OpenPNE 3.9.0 to OpenPNE-3.9.1

#10 Updated by kaoru n over 1 year ago

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

マージしました

Also available in: Atom PDF