あるプロセスが突然死しました。もっとも、突然死といったって、そこには原因があるわけです。原因は勿論、バグでした。そのプロセスには、プロセスの状態を外部から参照するためのIFがあるのですが、そこに必殺のバグがありました。
そのIFは、コマンドとパラメータを受け取って、ソレに従った情報を返すのですが、超絶素晴らしいコードが書いてあったのです。
string f(arguments &args_)
{
if (!args_.empty()) { // パラメータがあったらusage()を返して抜ける。
return usage();
}
...
if (sscanf(args_[0].c_str(), "%d-%d",... // のに、ここでパラメータを要求している。
死ぬ。必ず死ぬ。パラメータなしで実行したら、sscanf(){
if (!args_.empty()) { // パラメータがあったらusage()を返して抜ける。
return usage();
}
...
if (sscanf(args_[0].c_str(), "%d-%d",... // のに、ここでパラメータを要求している。
このコードを書いた人は、どうも、似たような関数からこのあたりを、コピーしてきたようなのですが、コピー元は、パラメータを持たない仕様の関数だったので、コレでよかったのですが、問題の関数はそうではなかったので、致命傷となりました。
コメント