AUTOSAR C++14 Rule A27-0-2
A C-style string shall guarantee sufficient space for data and the null terminator
説明
ルール定義
A C-style string shall guarantee sufficient space for data and the null terminator.
根拠
C スタイルの文字列は書き込まれる文字データの容量に加え、末尾の null 終端のために明示的な 1 文字を必要とします。必要な容量に対応できないとバッファー オーバーフローが発生し、メモリの破損、セキュリティの脆弱性、その他の問題につながります。
Polyspace 実装
チェッカーは次の問題を検出します。
危険な標準関数を使用している。
この問題は、
getsやstrcpyなどの C 関数を使用している場合に発生します。これはデータをバッファに書き込みますが、書き込まれるデータの長さに対する制御は本質的に提供しません。関数の完全なリストとその安全な代替方法については、
危険な標準関数の使用を参照してください。不正確な文字列形式指定子によるバッファー オーバーフロー。
この問題は、
sscanfなどの C 関数の書式指定子引数が、メモリ バッファー引数でのオーバーフローまたはアンダーフローにつながる場合に発生します。文字列操作で格納先バッファーがオーバーフローしています。
この問題は、特定の C 文字列操作関数によって、その格納先バッファー引数にバッファー サイズを超えるオフセットで書き込まれた場合に発生します。
たとえば、関数
sprintf(char* buffer, const char* format)を呼び出す際に、bufferより大きいサイズの定数文字列formatを使用する場合などです。格納先バッファー サイズが不十分
この現象は、
strcpy演算内の格納先バッファーにソース バッファーと null 終端が収まらない場合に発生します。この問題は、ソース バッファーのサイズが不明な場合に報告されます。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Input/output library |
| カテゴリ: Advisory、Automated |