MISRA C:2023 Dir 4.14
説明
命令の定義
The validity of values received from external sources shall be checked. 1
This rule comes from MISRA C™:2012 Amendment 1.
根拠
外部ソースから得る値は、エラーや攻撃者による意図的な変更が原因で無効なものになる可能性があります。データを使用する前に、そのデータの妥当性をチェックしなければなりません。
次に例を示します。
外部入力を配列インデックスとして使用する前に、その入力が配列の値域エラーの原因になる可能性があるかどうかをチェックしなければなりません。
外部変数をループの制御に使用する前に、その変数が無限ループになる可能性があるかどうかをチェックしなければなりません。
Polyspace 実装
ルール チェッカーは次の問題を検出します。
null 終端文字列が必要な場合での、null 終端文字のない外部で取得された文字列の使用。このような使用は、未定義の動作を引き起こす可能性があります。たとえば、このコードでは関数
printf()には null 終端文字を含む文字列が必要です。null 文字で終端しない文字配列strを使用すると、未定義の動作となります。char str[10]; scanf("%10c", str); printf("%s",str);//Null terminated string expected外部で取得された不確定文字列の使用。たとえば、文字列の値を設定するために
fgets()ファミリ関数を呼び出したが、この関数呼び出しが失敗した場合、文字列が不確定になる可能性があります。関数char buffer[10]; fgets(buffer, sizeof(buffer), stdin); //buffer is indeterminate if fgets() fails printf("%s",buffer); // Possible undefined behviorprintf()には null 終端文字を含む文字列が必要であるため、bufferをこの関数で使用すると、未定義の動作を引き起こす可能性があります。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: Code design |
| カテゴリ: 必要 |
| AGC カテゴリ: 必要 |
バージョン履歴
R2024a で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.