AUTOSAR C++14 Rule M0-3-2
If a function generates error information, then that error information shall be tested
説明
ルール定義
If a function generates error information, then that error information shall be tested.
根拠
戻り値でエラー情報を示す関数の戻り値をチェックしない場合、プログラムが予期しない動作をする可能性があります。これらの関数のエラーはプログラム全体に伝播し、不適切な出力、セキュリティの脆弱性およびシステム障害の原因となる可能性があります。
errno を設定する関数でエラーなしで関数呼び出しが完了したかどうかを確認するには、errno のエラー値をチェックします。このような errno を設定する関数の戻り値はエラーを示しません。戻り値は、以下のいずれかになります。
voidエラーが発生しても、戻り値は正常に行われた呼び出しと同じ値になる可能性があります。このような戻り値をインバンド エラー インジケーターと呼びます。たとえば、
strtolは文字列を long 型整数に変換して、その整数を返します。変換結果がオーバーフローする場合、この関数はLONG_MAXを返し、errnoにERANGEを設定します。ただし、この関数は正常に変換が行われてもLONG_MAXを返すことがあります。errnoをチェックすることでのみ、エラーと正常な変換を区別することができます。
errno を設定する関数でエラーが発生したかどうかは、errno をチェックすることでのみ判断できます。
Polyspace 実装
チェッカーは以下の場合に違反を報告します。
エラー発生の可能性に関する情報を返す、要注意の関数を呼び出した後、戻り値を無視するか、戻り値をテストせずに関数の出力を使用する。
チェッカーは標準ライブラリに含まれる関数と、POSIX ライブラリや WinAPI ライブラリなどの他の有名なライブラリに含まれる関数に対応します。以下のような理由で関数の呼び出しでエラーが発生しやすい場合、Polyspace® はその関数を要注意と見なします。
システム リソースが使い尽くされた状態 (リソースを割り当てるときなど)。
権限またはアクセス許可が変更された状態。
外部ソースからのデータを読み取り、書き込みまたは変換する際にソースが汚染された状態。
既存の API があってもサポートされない機能。
Polyspace は、以下のような重要なタスクを実行する関数を、重要で要注意の関数と見なします。
権限の設定 (
setuidなど)jail の作成 (
chrootなど)プロセスの作成 (
forkなど)スレッドの作成 (
pthread_createなど)ミューテックスのロックまたはロック解除 (
pthread_mutex_lockなど)メモリ セグメントのロックまたはロック解除 (
mlockなど)
重要ではない関数の場合、関数の戻り値を
voidにキャストすることによって明示的に戻り値を無視していれば、チェッカーはその関数にフラグを設定しません。重要で要注意の関数の場合、その戻り値を明示的に無視すると、Polyspace によってフラグが設定されます。エラー状態を示すために
errnoを設定する関数を呼び出しても、その呼び出し後にerrnoをチェックしていない。このような関数の場合、エラーが発生したかどうかを判断するための唯一信頼できる方法はerrnoをチェックすることです。エラーで
errnoを設定する関数には次のものがあります。fgetwc、strtolおよびwcstol。関数の包括的な一覧については、errno に関するドキュメンテーションを参照してください。
encrypt、setkeyなどの POSIX®errno設定関数。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 言語に依存しない問題 |
| カテゴリ: Required、Non-automated |