説明
外部入力を整数の除数に使い、ゼロかどうかを確認しないと、未定義動作となり、プログラムが終了する可能性があります。
想定される影響
- プロセスの終了や繰り返しのリクエスト失敗が、サービス拒否につながるおそれがあります。
対処方法
除算する前に、除数がゼロでなく許容範囲内にあることを確認してください。数値の形式と変換エラーも確認してください。
例
変更前
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などを使ってください。