AUTOSAR C++14 Rule A5-6-1
The right hand operand of the integer division or remainder operators shall not be equal to zero
説明
ルール定義
整数の除算演算子または残余演算子の右オペランドがゼロに等しくてはなりません。
根拠
分子 (被除数) が可能な限りの最小値であり、分母 (除数) が
-1である場合、除算演算は結果が現在の変数のサイズでは表現できないためオーバーフローします。分母がゼロである場合、除算演算は失敗し、プログラムがクラッシュがする可能性があります。
こうしたリスクは、恣意的なコードの実行に利用される可能性があります。このようなコードは通例において、プログラムの暗黙的なセキュリティ ポリシーの範囲外です。
2 番目の残余オペランドが 0 である場合、残余演算は失敗し、プログラムはクラッシュします。
2 番目の残余オペランドが
-1である場合、オーバーフローし得る除算演算を基に残余演算が実装されていると、その残余演算はオーバーフローする可能性があります。オペランドの 1 つが負である場合、演算の結果は不確定になります。C89 ではモジュロ演算は標準化されていないため、負のオペランドによる結果は処理系定義となります。
こうしたリスクは、攻撃者によってプログラムあるいはターゲット一般へのアクセスに利用される場合があります。
Polyspace 実装
チェッカーは以下の場合に欠陥を報告します。
除算演算またはモジュロ演算の分母 (除数) がゼロ値の整数になる可能性がある。
整数オペランドの一方あるいは両方がセキュリティで保護されないソース由来である除算演算がある。
汚染されたオペランドが 1 つ以上含まれているモジュロ演算がある。
チェッカーの拡張
特定の値と外部入力を原因とする欠陥をチェックするには、このチェッカーを拡張してください。次に例を示します。
入力値が不明であり、入力のサブセットのみがエラーの原因として考えられる場合、既定の Bug Finder 解析ではこの欠陥が報告されない可能性があります。特定のシステム入力値を原因とする欠陥の有無をチェックするには、より厳密な Bug Finder 解析を実行してください。特定のシステム入力値から欠陥を見つけるための Bug Finder チェッカーの拡張を参照してください。
既定では、Polyspace® は外部ソースからのデータは汚染されていると仮定します。Polyspace 解析での汚染のソースを参照してください。Polyspace 解析の現在のスコープ以外から発生したすべてのデータを汚染されたものと見なすには、コマンド ライン オプション
[-consider-analysis-perimeter-as-trust-boundary]を使用します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 式 |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入