ゼロによる除算

ゼロによる除算

説明

外部入力を整数の除数に使い、ゼロかどうかを確認しないと、未定義動作となり、プログラムが終了する可能性があります。

想定される影響

  • プロセスの終了や繰り返しのリクエスト失敗が、サービス拒否につながるおそれがあります。

対処方法

除算する前に、除数がゼロでなく許容範囲内にあることを確認してください。数値の形式と変換エラーも確認してください。

例

変更前

c
int divisor = atoi(argv[1]);
int result = 100 / divisor;

変更後

c
int divisor = atoi(argv[1]);
if (divisor == 0) { return; }
int result = 100 / divisor;

変更前は入力を除数に使いますが、ゼロかどうかを確認しません。変更後はゼロを拒否してから除算します。

ゼロの確認だけを比較する抜粋です。実際の入力処理では引数の存在を確認し、atoiではなく、エラーと範囲を確認できるstrtolなどを使ってください。

参考資料