Klocwork および Klocwork community チェッカーにマッピングされた CERT C++ 規則
以下の表では、コンピューター緊急対応チーム (CERT) が定義しているセキュアコーディング基準にマッピングされた、Klocwork および Klocwork community C++ チェッカーをリストしています。
ガイドライン | チェッカー名および説明 |
---|---|
ARR37-C |
CERT.ARR.PTR.ARITH 演算式にポインターが使用されています |
ARR39-C |
CERT.ARR.PTR.ARITH 演算式にポインターが使用されています |
CON02-CPP |
CONC.DL デッドロック |
CON33-C |
CERT.CONC.LIB_FUNC_USE ライブラリ関数の使用時には競合状態を避けてください |
CON37-C |
MISRA.STDLIB.SIGNAL signal.h の信号処理装置の使用 |
CON40-C |
CERT.CONC.ATOMIC_TWICE_EXPR 1 つの式でアトミック変数を 2 回参照しないでください |
CON41-C |
CERT.CONC.ATOMIC_COMP_FAIL_IN_LOOP ループで疑似的に失敗する可能性のある関数はラップしてください |
CON50-CPP |
CERT.CONC.MUTEX.DESTROY_WHILE_LOCKED ロックされている間はミューテックスを破棄しないでください |
CON54-CPP |
CERT.CONC.WAKE_IN_LOOP 擬似的にループを起動する可能性のあるラップ関数 |
CON55-CPP |
CERT.CONC.UNSAFE_COND_VAR 条件変数の使用時に、スレッドセーフと活性を維持します |
CTR01-CPP |
CWARN.MEMSET.SIZEOF.PTR ポインタに適用される 'sizeof' には、memset のような関数が呼び出されます INCORRECT.ALLOC_SIZE 不適切な割り当てサイズ |
CTR50-CPP |
ABV.ANY_SIZE_ARRAY バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL.MULTIDIMENSION バッファオーバーフロー - 配列インデックスが範囲外 ABV.STACK バッファオーバーフロー - ローカル配列インデックスが範囲外 ABV.TAINTED 未検証の入力によるバッファオーバーフロー SV.TAINTED.ALLOC_SIZE メモリ割り当て時の未検証の整数の使用 SV.TAINTED.CALL.INDEX_ACCESS 関数呼び出し時の配列インデックスとしての未検証の整数の使用 SV.TAINTED.CALL.LOOP_BOUND 関数呼び出しのループ条件での未検証の整数の使用 SV.TAINTED.INDEX_ACCESS 配列インデックスとしての未検証の整数の使用 |
CTR51-CPP |
ITER.CONTAINER.MODIFIED 無効な反復子の使用 |
DCL01-CPP |
MISRA.VAR.HIDDEN 内部のスコープで宣言された識別子によって外部のスコープの識別子が非表示になっています |
DCL07-CPP |
MISRA.VAR.MIN.VIS 名前の可視性が高すぎます |
DCL10-CPP |
MISRA.BIN_OP.OVERLOAD カンマ、|| または && 演算子が多重定義されています MISRA.UN_OP.OVERLOAD 単項の & 演算子が多重定義されています |
DCL12-CPP |
MISRA.SPEC.ILL テンプレートの明示的なインスタンス化により、コードの形式が損なわれます |
DCL19-CPP |
UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 UNINIT.CTOR.MUST コンストラクタにおける未初期化の変数 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 UNINIT.STACK.ARRAY.MIGHT 未初期化の配列の可能性 UNINIT.STACK.ARRAY.MUST 未初期化の配列 UNINIT.STACK.ARRAY.PARTIAL.MUST 一部が未初期化の配列 UNINIT.STACK.MIGHT 未初期化の変数の可能性 UNINIT.STACK.MUST 未初期化の変数 |
DCL50-CPP |
MISRA.FUNC.VARARG 関数が可変数の引数を持っています |
DCL51-CPP |
MISRA.DEFINE.WRONGNAME 標準ライブラリからの名前がマクロ名に使用されています MISRA.DEFINE.WRONGNAME.UNDERSCORE 予約名がマクロ名に使用されています MISRA.STDLIB.WRONGNAME 標準ライブラリのマクロ、オブジェクトまたは関数の名前が再使用されています MISRA.STDLIB.WRONGNAME.UNDERSCORE 予約名が言語エンティティの名前に使用されています MISRA.UNDEF.WRONGNAME 標準ライブラリからの名前が定義されていません MISRA.UNDEF.WRONGNAME.UNDERSCORE 予約名が定義されていません |
DCL52-CPP |
CERT.DCL.REF_TYPE.CONST_OR_VOLATILE 参照型を const または volatile で修飾しないでください |
DCL53-CPP |
CERT.DCL.AMBIGUOUS_DECL 構文的に曖昧な宣言を作成しないでください |
DCL54-CPP |
CERT.DCL.SAME_SCOPE_ALLOC_DEALLOC 同一のスコープ内のペアとしての割り当ておよび割り当て解除関数をオーバーロードします |
DCL57-CPP |
MISRA.DTOR.THROW デストラクタにスローします |
DCL58-CPP |
CERT.DCL.STD_NS_MODIFIED 標準名前空間を変更しないでください |
DCL59-CPP |
MISRA.NAMESPACE.UNMD ヘッダーファイルに名前のない名前空間があります |
ENV02-CPP |
MISRA.STDLIB.ABORT ライブラリ stdlib.h から 'abort'、'exit'、'getenv' または 'system' が使用されています SV.CODE_INJECTION.SHELL_EXEC シェル実行へのコマンドインジェクション SV.TAINTED.INJECTION コマンドインジェクション |
ENV30-C |
CXX.STDLIB.ILLEGAL_WRITE 標準ライブラリ関数 localeconv、getenv、setlocale、または strerror が返すポインターは、必ずそれらが const-qualified 型を指すポインターを持つかのように使用する必要があります。 |
ENV32-C |
CERT.EXIT.HANDLER_TERMINATE すべての exit ハンドラーは正常に戻る必要があります |
ENV33-C |
SV.CODE_INJECTION.SHELL_EXEC シェル実行へのコマンドインジェクション |
ENV34-C |
CXX.STDLIB.ILLEGAL_REUSE 標準ライブラリ関数 asctime または同様の関数によって返されるポインタは、同じ関数の後続の呼び出しに続いては使用しません |
ERR01-CPP |
MISRA.STDLIB.ERRNO エラーインジケーター 'errno' が使用されています |
ERR08-CPP |
MISRA.THROW.PTR 例外オブジェクトがポインタになっています |
ERR09-CPP |
MISRA.CATCH.BY_VALUE クラス タイプの例外オブジェクトが値によってキャッチされています MISRA.THROW.PTR 例外オブジェクトがポインタになっています |
ERR10-CPP |
NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます SV.RVT.RETVAL_NOTTESTED 戻り値の無視 |
ERR33-C |
NPD.CHECK.MUST ポインタを明示的に NULL チェックした後に逆参照します NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます SV.RVT.RETVAL_NOTTESTED 戻り値の無視 |
ERR50-CPP |
CERT.ERR.ABRUPT_TERM 突然プログラムを終了しないでください MISRA.TERMINATE terminate() 関数が明示的に呼び出されています |
ERR51-CPP |
MISRA.CATCH.ALL try-catch ブロックに省略記号例外ハンドラーがありません |
ERR52-CPP |
MISRA.STDLIB.LONGJMP setjmp マクロまたは longjmp 関数の使用 |
ERR53-CPP |
MISRA.CTOR.TRY.NON_STATIC コンストラクタまたはデストラクタの関数 try-catch ブロックが非スタティックなメンバーを参照しています |
ERR54-CPP |
MISRA.CATCH.NOALL 省略記号例外ハンドラーが try-catch ブロックの最後に置かれていません MISRA.CATCH.WRONGORD try-catch ブロックで基本例外クラスのハンドラーが派生例外クラスのハンドラーよりも先に置かれています |
ERR57-CPP |
CL.MLK メモリリーク - デストラクタで発生 MLK.MIGHT メモリリークの可能性 MLK.MUST メモリリーク MLK.RET.MIGHT メモリリークの可能性 MLK.RET.MUST メモリリーク RH.LEAK リソースリーク |
ERR61-CPP |
MISRA.CATCH.BY_VALUE クラス タイプの例外オブジェクトが値によってキャッチされています |
ERR62-CPP |
CERT.ERR.CONV.STR_TO_NUM 文字列を数値に変換する際にエラーを検出する |
EXP00-CPP |
CERT.EXPR.PARENS 式内の演算子の優先度は明示的にする必要があります。 MISRA.EXPR.PARENS.INSUFFICIENT 式の演算子優先規則に制限された依存性が必要です MISRA.EXPR.PARENS.REDUNDANT 式の演算子優先規則に制限された依存性が必要です |
EXP01-CPP |
CWARN.MEMSET.SIZEOF.PTR ポインタに適用される 'sizeof' には、memset のような関数が呼び出されます INCORRECT.ALLOC_SIZE 不適切な割り当てサイズ |
EXP05-CPP |
BSTR.CAST.C C スタイルの型が BSTR にキャストされます MISRA.C_CAST 非 void タイプへの C スタイルのキャストです |
EXP06-CPP |
MISRA.SIZEOF.SIDE_EFFECT sizeof のオペランドに副作用があります |
EXP08-CPP |
ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL.MULTIDIMENSION バッファオーバーフロー - 配列インデックスが範囲外 ABV.ITERATOR バッファオーバーフロー - 配列インデックスが範囲外の可能性 MISRA.PTR.ARITH 代数式または配列インデックス式でポインタが使用されています |
EXP09-CPP |
INCORRECT.ALLOC_SIZE 不適切な割り当てサイズ |
EXP10-CPP |
PORTING.VAR.EFFECTS ある使用法が副次的な影響を受ける式で変数が 2 回使用されています |
EXP11-CPP |
PORTING.BITFIELDS 構造内でのビットフィールドの使用法 PORTING.CAST.FLTPNT 非浮動小数点タイプへの浮動小数点式のキャスト PORTING.CAST.PTR 両方ともポインタでない型といずれかがポインタでない型間のキャスト PORTING.CAST.PTR.FLTPNT 非浮動小数点型のポインタへの浮動小数点式のポインタのキャスト PORTING.CAST.PTR.SIZE サイズに互換性がない可能性がある型への式のキャストの可能性 PORTING.CAST.SIZE サイズが異なる可能性がある型に式がキャストされています |
EXP12-CPP |
MISRA.FUNC.UNUSEDRET 非 void 関数の戻り値が使用されていません SV.RVT.RETVAL_NOTTESTED 戻り値の無視 |
EXP15-CPP |
MISRA.CAST.UNSIGNED_BITS unsigned char または short でのビット演算の結果は元の型にキャストできません |
EXP34-CPP |
NPD.CHECK.CALL.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性のある関数に渡す可能性があります NPD.CHECK.CALL.MUST ポインタを明示的に NULL チェックした後に逆参照する可能性がある関数に渡します NPD.CHECK.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性があります NPD.CHECK.MUST ポインタを明示的に NULL チェックした後に逆参照します NPD.CONST.CALL 逆参照する可能性のある関数に NULL を渡しています NPD.CONST.DEREF NULL は逆参照されます NPD.FUNC.CALL.MIGHT NULL を返す関数の戻り値が、これを逆参照する可能性のある別の関数に渡される可能性があります NPD.FUNC.CALL.MUST NULL を返す関数の戻り値が、これを逆参照する可能性がある別の関数に渡されます NPD.FUNC.MIGHT NULL を返す可能性のある関数の戻り値が逆参照される場合があります NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます NPD.GEN.CALL.MIGHT NULLポインタを逆参照する可能性がある関数に渡す場合があります NPD.GEN.CALL.MUST NULLポインタを逆参照する関数に渡します NPD.GEN.MIGHT NULLポインタを逆参照する可能性があります NPD.GEN.MUST NULLポインタを逆参照します RNPD.CALL NULL チェック前のポインタの、関数呼び出しにおける逆参照は問題となる可能性があります RNPD.DEREF NULL チェック前のポインタの逆参照は問題となる可能性があります |
EXP39-C |
CXX.CAST.OBJ_PTR_TO_OBJ_PTR オブジェクト タイプを指すポインタと、異なるオブジェクト タイプを指す別のポインタとの間のキャスト |
EXP42-C |
CERT.MEMCMP.PADDED_DATA パディングデータを比較しないでください |
EXP47-C |
CERT.VA_ARG.TYPE 正しくない型の引数で va_arg を呼び出さない |
EXP50-CPP |
CERT.EXPR.PARENS 式内の演算子の優先度は明示的にする必要があります。 MISRA.EXPR.PARENS.INSUFFICIENT 式の演算子優先規則に制限された依存性が必要です MISRA.INCR_DECR.OTHER 増分または減分の演算子がその他の演算子と混合して式で使用されています PORTING.VAR.EFFECTS ある使用法が副次的な影響を受ける式で変数が 2 回使用されています |
EXP51-CPP |
CERT.EXPR.DELETE_ARR.BASE_PTR 不正な型のポインターを使用して配列を削除しないでください |
EXP52-CPP |
MISRA.SIZEOF.SIDE_EFFECT sizeof のオペランドに副作用があります |
EXP53-CPP |
UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 UNINIT.CTOR.MUST コンストラクタにおける未初期化の変数 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 UNINIT.STACK.ARRAY.MIGHT 未初期化の配列の可能性 UNINIT.STACK.ARRAY.MUST 未初期化の配列 UNINIT.STACK.ARRAY.PARTIAL.MUST 一部が未初期化の配列 UNINIT.STACK.MIGHT 未初期化の変数の可能性 UNINIT.STACK.MUST 未初期化の変数 |
EXP54-CPP |
CL.FFM.ASSIGN 解放済みメモリの使用 (二重解放) - operator= が無いため CL.FFM.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため LOCRET.ARG 関数がローカル変数のアドレスを返しています LOCRET.GLOB 関数がローカル変数のアドレスを返しています LOCRET.RET 関数がローカル変数のアドレスを返しています UFM.DEREF.MIGHT 解放済みメモリの逆参照の可能性 UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 UNINIT.STACK.ARRAY.MIGHT 未初期化の配列の可能性 UNINIT.STACK.ARRAY.MUST 未初期化の配列 UNINIT.STACK.ARRAY.PARTIAL.MUST 一部が未初期化の配列 UNINIT.STACK.MIGHT 未初期化の変数の可能性 UNINIT.STACK.MUST 未初期化の変数 |
EXP55-CPP |
MISRA.CAST.CONST キャスト演算により const または volatile がポインターまたは参照から除外されます。 |
EXP56-CPP |
MISRA.CAST.PTR.UNRELATED ポインタ型のオブジェクトを関連のない型にキャストしています MISRA.CAST.PTR_TO_INT ポインタと整数型間のキャスト PORTING.CAST.PTR 両方ともポインタでない型といずれかがポインタでない型間のキャスト PORTING.CAST.PTR.FLTPNT 非浮動小数点型のポインタへの浮動小数点式のポインタのキャスト PORTING.CAST.PTR.SIZE サイズに互換性がない可能性がある型への式のキャストの可能性 PORTING.CAST.SIZE サイズが異なる可能性がある型に式がキャストされています |
EXP57-CPP |
CERT.EXPR.DELETE_PTR.INCOMPLETE_TYPE 不完全な型へのポインターを削除しないでください |
EXP58-CPP |
CERT.VA_START.TYPE 正しい型のオブジェクトを va_start に渡す |
EXP60-CPP |
CERT.EXPR.PASS_NON_STD_LAYOUT 実行境界を超えて標準ではないレイアウトタイプオブジェクトを渡さないでください |
EXP61-CPP |
LOCRET.RET 関数がローカル変数のアドレスを返しています |
EXP62-CPP |
CERT.MEMCMP.PADDED_DATA パディングデータを比較しないでください CWARN.MEM.NONPOD 非 POD オブジェクトに適用されるメモリ操作ルーチン |
FIO00-CPP |
SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD 互換性がない print 関数パラメーターの型 SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED 予期しない print 関数パラメーターの型 SV.FMT_STR.PRINT_IMPROP_LENGTH print 関数呼び出しの長さ修飾子の不適切な使用 SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW print 関数呼び出しの引数が少なすぎます SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY print 関数呼び出しの引数が多すぎます SV.FMT_STR.UNKWN_FORMAT print 関数呼び出しの書式指定子が不明です |
FIO01-CPP |
SV.TOCTOU.FILE_ACCESS ファイル アクセス時の作成日時/使用日時の競合状態 |
FIO02-CPP |
SV.DLLPRELOAD.NONABSOLUTE.DLL DLL プリロードのハイジャック ベクターの可能性 SV.TOCTOU.FILE_ACCESS ファイル アクセス時の作成日時/使用日時の競合状態 |
FIO04-CPP |
MISRA.FUNC.UNUSEDRET 非 void 関数の戻り値が使用されていません SV.RVT.RETVAL_NOTTESTED 戻り値の無視 |
FIO17-CPP |
MISRA.INCL.UNSAFE 安全でないヘッダーのインクルード MISRA.STDLIB.STDIO プロダクションコードで入力/出力ライブラリ stdio.h が使用されています |
FIO30-C |
SV.FMTSTR.GENERIC 書式文字列の脆弱性 SV.TAINTED.FMTSTR 書式文字列での未検証データの使用 |
FIO34-C |
CWARN.CMPCHR.EOF 'char' 式と EOF 定数との比較 |
FIO38-C |
CERT.FILE_PTR.DEREF FILE オブジェクトへのポインターは逆参照してはなりません CERT.FILE_PTR.DEREF.CAST オブジェクトは FILE ポインターにキャストされており、これを逆参照してはなりません。 CERT.FILE_PTR.DEREF.INDIRECT FILE オブジェクトへのポインターは、システム関数で間接的に逆参照してはなりません CERT.FILE_PTR.DEREF.RETURN FILE オブジェクト(関数の戻り値)へのポインターは逆参照してはなりません MISRA.FILE_PTR.DEREF.2012 FILE オブジェクトへのポインターは逆参照してはなりません MISRA.FILE_PTR.DEREF.CAST.2012 オブジェクトは FILE ポインターにキャストされており、これを逆参照してはなりません。 MISRA.FILE_PTR.DEREF.INDIRECT.2012 FILE オブジェクトへのポインターは、システム関数で間接的に逆参照してはなりません MISRA.FILE_PTR.DEREF.RETURN.2012 FILE オブジェクト(関数の戻り値)へのポインターは逆参照してはなりません |
FIO39-C |
CERT.FIO.NO_FLUSH フラッシュまたは位置調整の関数呼び出しの欠如 |
FIO42-C |
RH.LEAK リソースリーク |
FIO44-C |
CERT.FSETPOS.VALUE fsetpos() に、fgetpos() から返される値のみを使用します |
FIO45-C |
SV.TOCTOU.FILE_ACCESS ファイル アクセス時の作成日時/使用日時の競合状態 |
FIO46-C |
SV.INCORRECT_RESOURCE_HANDLING.URH 安全でないリソース処理 |
FIO47-C |
SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD 互換性がない print 関数パラメーターの型 SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED 予期しない print 関数パラメーターの型 SV.FMT_STR.PRINT_IMPROP_LENGTH print 関数呼び出しの長さ修飾子の不適切な使用 SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW print 関数呼び出しの引数が少なすぎます SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY print 関数呼び出しの引数が多すぎます SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD 互換性がない scan 関数パラメーターの型 SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED 予期しない scan 関数パラメーターの型 SV.FMT_STR.SCAN_IMPROP_LENGTH scan 関数呼び出しの長さ修飾子の不適切な使用 SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW scan 関数呼び出しの引数が少なすぎます SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY scan 関数呼び出しの引数が多すぎます SV.FMT_STR.UNKWN_FORMAT print 関数呼び出しの書式指定子が不明です |
FIO51-CPP |
RH.LEAK リソースリーク |
FLP30-C |
MISRA.FOR.COUNTER.FLT for ループのカウンターが浮動小数点タイプです |
FLP34-C |
MISRA.CAST.FLOAT.WIDER より広い浮動小数点タイプへの浮動小数点式のキャスト MISRA.CAST.FLOAT_INT 整数型への浮動小数点式のキャスト MISRA.CAST.INT_FLOAT 浮動小数点タイプへの複合式のキャスト MISRA.CONV.FLOAT 暗黙的な浮動小数点変換です |
FLP36-C |
PORTING.CAST.FLTPNT 非浮動小数点タイプへの浮動小数点式のキャスト |
FLP37-C |
CERT.MEMCMP.FLOAT_MEMBER メンバーが浮動小数点の場合、比較しないでください |
INT02-CPP |
MISRA.CAST.INT 自明ではない整数式が広い型または別の符号を持つ型にキャストされています MISRA.CAST.UNSIGNED_BITS unsigned char または short でのビット演算の結果は元の型にキャストできません MISRA.CONV.INT.SIGN 暗黙的な整数変換により符号が変わります MISRA.CVALUE.IMPL.CAST 暗黙の型変換で符号、型サイズ、型の違いにより情報の損失を起こす記述があります。 MISRA.UMINUS.UNSIGNED 単項マイナス演算子が符号なしオペランドに対して使用されています。 PRECISION.LOSS 精度の損失 |
INT04-CPP |
ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL.MULTIDIMENSION バッファオーバーフロー - 配列インデックスが範囲外 INCORRECT.ALLOC_SIZE 不適切な割り当てサイズ NNTS.TAINTED 未検証のユーザー入力が原因のバッファオーバーフロー - 非 NULL 終了文字列 SV.STRBO.UNBOUND_COPY バインドされていない文字列コピーでのバッファオーバーフロー SV.STRBO.UNBOUND_SPRINTF バインドされていない sprintf でのバッファオーバーフロー |
INT05-CPP |
SV.BANNED.RECOMMENDED.SCANF 禁止が推奨されているAPI: 安全でない scanf 型関数 SV.TAINTED.ALLOC_SIZE メモリ割り当て時の未検証の整数の使用 SV.TAINTED.BINOP バイナリ演算での未検証整数値の使用 SV.TAINTED.CALL.BINOP バイナリ演算での未検証整数値の使用 SV.TAINTED.CALL.INDEX_ACCESS 関数呼び出し時の配列インデックスとしての未検証の整数の使用 SV.TAINTED.CALL.LOOP_BOUND 関数呼び出しのループ条件での未検証の整数の使用 SV.TAINTED.INDEX_ACCESS 配列インデックスとしての未検証の整数の使用 SV.TAINTED.LOOP_BOUND ループ条件での未検証の整数の使用 |
INT06-CPP |
MISRA.STDLIB.ATOI ライブラリ stdlib.h から 'atof'、'atoi' または 'atol' が使用されています SV.BANNED.RECOMMENDED.SCANF 禁止が推奨されているAPI: 安全でない scanf 型関数 |
INT07-CPP |
MISRA.CHAR.NOT_CHARACTER 文字でない値に 'char' が使用されています MISRA.SIGNED_CHAR.NOT_NUMERIC 数値でない値に 'signed char' または 'unsigned char' が使用されています PORTING.UNSIGNEDCHAR.OVERFLOW.FALSE 'char' 型の符号によっては関係式が常に false になる場合があります |
INT11-CPP |
PORTING.CAST.PTR 両方ともポインタでない型といずれかがポインタでない型間のキャスト |
INT12-CPP |
MISRA.BITFIELD.TYPE ビットフィールドのタイプは、符号付き/符号なし整数のいずれでもありません |
INT13-CPP |
MISRA.BITS.NOT_UNSIGNED ビット演算のオペランドが符号なし整数ではありません MISRA.BITS.NOT_UNSIGNED.PREP ビット演算のオペランドが符号なし整数ではありません |
INT32-C |
CWARN.NOEFFECT.OUTOFRANGE 範囲外の値 NUM.OVERFLOW オーバーフローの可能性 NUM.OVERFLOW.DF 起こり得る数値のオーバーフローまたはラップアラウンド |
INT34-C |
MISRA.SHIFT.RANGE.2012 シフト演算子の右側のオペランドは範囲外です - 左側のオペランドの基本タイプのサイズ以上か、または負 |
MEM00-CPP |
UFM.DEREF.MIGHT 解放済みメモリの逆参照の可能性 UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 |
MEM01-CPP |
UFM.DEREF.MIGHT 解放済みメモリの逆参照の可能性 UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 |
MEM05-CPP |
MISRA.FUNC.RECUR 再帰関数 SV.TAINTED.ALLOC_SIZE メモリ割り当て時の未検証の整数の使用 |
MEM09-CPP |
NNTS.MIGHT バッファオーバーフロー - 非 NULL 終了文字列 NNTS.MUST バッファオーバーフロー - 非 NULL 終了文字列 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 |
MEM50-CPP |
UFM.DEREF.MIGHT 解放済みメモリの逆参照の可能性 UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 |
MEM51-CPP |
CL.FFM.ASSIGN 解放済みメモリの使用 (二重解放) - operator= が無いため CL.FFM.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため CL.FMM メモリの解放の不一致 - デストラクタで発生 CL.SHALLOW.ASSIGN 解放済みメモリの使用 (二重解放) - 演算子 = での浅いコピー CL.SHALLOW.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタでの浅いコピー FMM.MIGHT メモリの解放の不一致の可能性 FMM.MUST メモリの解放の不一致 FNH.MIGHT 非ヒープメモリの解放の可能性 FNH.MUST 非ヒープメモリの解放 FUM.GEN.MIGHT 未割り当てメモリの解放の可能性 FUM.GEN.MUST 未割り当てメモリの解放 UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 UNINIT.CTOR.MUST コンストラクタにおける未初期化の変数 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 |
MEM52-CPP |
NPD.CHECK.CALL.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性のある関数に渡す可能性があります NPD.CHECK.CALL.MUST ポインタを明示的に NULL チェックした後に逆参照する可能性がある関数に渡します NPD.CHECK.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性があります NPD.CHECK.MUST ポインタを明示的に NULL チェックした後に逆参照します NPD.CONST.CALL 逆参照する可能性のある関数に NULL を渡しています NPD.CONST.DEREF NULL は逆参照されます NPD.FUNC.CALL.MIGHT NULL を返す関数の戻り値が、これを逆参照する可能性のある別の関数に渡される可能性があります NPD.FUNC.CALL.MUST NULL を返す関数の戻り値が、これを逆参照する可能性がある別の関数に渡されます NPD.FUNC.MIGHT NULL を返す可能性のある関数の戻り値が逆参照される場合があります NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます NPD.GEN.CALL.MIGHT NULLポインタを逆参照する可能性がある関数に渡す場合があります NPD.GEN.CALL.MUST NULLポインタを逆参照する関数に渡します NPD.GEN.MIGHT NULLポインタを逆参照する可能性があります NPD.GEN.MUST NULLポインタを逆参照します RNPD.CALL NULL チェック前のポインタの、関数呼び出しにおける逆参照は問題となる可能性があります RNPD.DEREF NULL チェック前のポインタの逆参照は問題となる可能性があります |
MEM55-CPP |
CERT.MEM.OVERRIDE.DELETE 'delete' の動的メモリ管理要件を変更してください CERT.MEM.OVERRIDE.NEW 'new' の動的メモリ管理要件を変更してください |
MSC01-CPP |
CWARN.EMPTY.LABEL ラベルステートメントが空です LA_UNUSED ラベルが使用されていません MISRA.IF.NO_ELSE if/else-if ステートメントのチェインが else で終了していないか、または空の else 句で終了しています MISRA.SWITCH.NODEFAULT switch ステートメントの最後に default 句がありません |
MSC02-CPP |
ASSIGCOND.CALL 割り当て条件 (呼び出し) ASSIGCOND.GEN 割り当て条件 EFFECT ステートメントの影響はありません MISRA.FUNC.ADDR & 演算子なしで関数のアドレスが使用されています |
MSC03-CPP |
EFFECT ステートメントの影響はありません SEMICOL セミコロンの位置を確認してください |
MSC04-CPP |
MISRA.TOKEN.BADCOM コメントに不適切な文字列があります |
MSC07-CPP |
LA_UNUSED ラベルが使用されていません UNREACH.ENUM enum が取りうる値が原因で、コードは到達不能になっています UNREACH.GEN 到達不能コード UNREACH.RETURN 到達不能な void return文 UNREACH.SIZEOF アーキテクチャに関連した到達不能コード VA_UNUSED.GEN 値を割り当て後に使用しません VA_UNUSED.INIT 値を初期化後に使用しません |
MSC08-CPP |
ABV.TAINTED 未検証の入力によるバッファオーバーフロー SV.TAINTED.ALLOC_SIZE メモリ割り当て時の未検証の整数の使用 SV.TAINTED.BINOP バイナリ演算での未検証整数値の使用 SV.TAINTED.CALL.BINOP バイナリ演算での未検証整数値の使用 SV.TAINTED.CALL.INDEX_ACCESS 関数呼び出し時の配列インデックスとしての未検証の整数の使用 SV.TAINTED.CALL.LOOP_BOUND 関数呼び出しのループ条件での未検証の整数の使用 SV.TAINTED.INDEX_ACCESS 配列インデックスとしての未検証の整数の使用 |
MSC12-CPP |
CWARN.NOEFFECT.SELF_ASSIGN 変数は自身に割り当てられます CWARN.NOEFFECT.UCMP.GE 符号なし値と 0 との比較は、常に true になります CWARN.NOEFFECT.UCMP.GE.MACRO マクロ内で符号なし値と 0 との比較は、常に true になります CWARN.NOEFFECT.UCMP.LT 符号なし値と 0 との比較は、常に false になります CWARN.NOEFFECT.UCMP.LT.MACRO マクロ内で符号なし値と 0 との比較は、常に false になります CWARN.NULLCHECK.FUNCNAME 関数アドレスが 0 と直接比較されます EFFECT ステートメントの影響はありません MISRA.STMT.NO_EFFECT そのステートメントは副作用がなく、制御フローを変更しません UNREACH.ENUM enum が取りうる値が原因で、コードは到達不能になっています UNREACH.GEN 到達不能コード UNREACH.RETURN 到達不能な void return文 UNREACH.SIZEOF アーキテクチャに関連した到達不能コード |
MSC13-CPP |
LV_UNUSED.GEN ローカル変数は使用されません VA_UNUSED.GEN 値を割り当て後に使用しません VA_UNUSED.INIT 値を初期化後に使用しません |
MSC18-CPP |
MISRA.SWITCH.NO_BREAK switch 句の最後に break ステートメントまたは throw ステートメントがありません MISRA.SWITCH.WELL_FORMED.BREAK.2012 条件なしの break ステートメントで各 switch 句を終了するべきです。 |
MSC20-CPP |
MISRA.SWITCH.LABEL switch のラベルが switch ボディ内の入れ子複合ステートメント内に置かれています MISRA.SWITCH.WELL_FORMED.BREAK.2012 条件なしの break ステートメントで各 switch 句を終了するべきです。 |
MSC21-CPP |
MISRA.FOR.COND.EQ ループカウンターに対して++ 演算子または -- 演算子を使用していませんが、ループカウンターがイコールかどうかで判定しています |
MSC30-C |
CERT.MSC.STD_RAND_CALL 疑似乱数の生成に std::rand() を使用しないでください |
MSC32-C |
CERT.MSC.SEED_RANDOM 疑似乱数ジェネレータを適切にシードする |
MSC33-C |
CERT.MSC.ASCTIME asctime() 関数に無効なデータを渡さないでください |
MSC37-C |
FUNCRET.GEN 非 void 関数に戻り値がありません FUNCRET.IMPLICIT 暗黙的に int を返す非 void 関数に戻り値がありません |
MSC39-C |
VA.LIST.INDETERMINATE 不定値を持つ va_list に対する va_arg() の呼び出し |
MSC41-C |
CXX.SV.PWD.PLAIN プレーンな文字列を使用してパスワードを設定しようとしています CXX.SV.PWD.PLAIN.LENGTH 15 文字未満の長さでパスワードを設定しようとしています CXX.SV.PWD.PLAIN.LENGTH.ZERO ゼロ文字の長さでパスワードを設定しようとしています HCC ハードコードされた資格情報の使用 HCC.PWD ハードコードされたパスワードの使用 HCC.USER ハードコードされたユーザー名の使用 |
MSC50-CPP |
CERT.MSC.STD_RAND_CALL 疑似乱数の生成に std::rand() を使用しないでください |
MSC51-CPP |
AUTOSAR.STDLIB.RANDOM.NBR_GEN_DEFAULT_INIT 乱数エンジンをデフォルトで初期化してはなりません |
MSC52-CPP |
FUNCRET.GEN 非 void 関数に戻り値がありません FUNCRET.IMPLICIT 暗黙的に int を返す非 void 関数に戻り値がありません |
MSC53-CPP |
CERT.MSC.NORETURN_FUNC_RETURNS [[noreturn]] と宣言された関数から返さないでください |
MSC54-CPP |
CERT.MSC.SIG_HANDLER.POF シグナルハンドラーは古いプレーン関数である必要があります |
OOP50-CPP |
CERT.OOP.CTOR.VIRTUAL_FUNC コンストラクタまたは、デストラクタから仮想関数を呼出してはならない |
OOP52-CPP |
CL.MLK.VIRTUAL メモリリーク - デストラクタで発生している可能性 CWARN.DTOR.NONVIRT.DELETE 仮想メソッドを持ち、仮想デストラクタを持たないクラスのオブジェクトの式を削除しています |
OOP53-CPP |
CERT.OOP.CTOR.INIT_ORDER コンストラクターメンバー初期化子を正規の順序で作成します |
OOP54-CPP |
CL.SELF-ASSIGN 解放済みメモリの使用 (二重解放) - operator= |
OOP55-CPP |
CERT.OOP.PTR_MEMBER.NO_MEMBER メンバー演算子へのポインターを使用して、存在しないメンバーにアクセスしないでください |
OOP57-CPP |
CERT.OOP.CSTD_FUNC_USE C 標準ライブラリ関数よりも特殊メンバー関数とオーバーロードされた演算子を優先します |
OOP58-CPP |
CERT.OOP.COPY_MUTATES コピー操作でソースオブジェクトを変更してはいけません |
POS30-C |
ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL.MULTIDIMENSION バッファオーバーフロー - 配列インデックスが範囲外 |
POS34-C |
CERT.PUTENV.AUTO_VARIABLE 自動変数へのポインターを引数として putenv() を呼び出さないでください |
POS35-C |
CERT.STR.ASSIGN.CONST_TO_NONCONST const char ポインターを非 const char ポインターに割り当てないでください SV.TOCTOU.FILE_ACCESS ファイル アクセス時の作成日時/使用日時の競合状態 |
POS36-C |
SV.USAGERULES.PERMISSIONS 特権の昇給の使用 |
POS37-C |
SV.USAGERULES.PERMISSIONS 特権の昇給の使用 |
POS39-C |
BYTEORDER.HTON.SEND ホストバイトオーダーからネットワークバイトオーダーの変換が欠落しています BYTEORDER.HTON.WRITE ホストバイトオーダーからネットワークバイトオーダーの変換が欠落しています BYTEORDER.NTOH.READ ネットワークバイトオーダーからホストバイトオーダーの変換が欠落しています BYTEORDER.NTOH.RECV ネットワークバイトオーダーからホストバイトオーダーの変換が欠落しています |
POS44-C |
MISRA.INCL.SIGNAL.2012 標準ヘッダーファイル signal.h は使用しない |
POS47-C |
CERT.POS.THREAD.ASYNC_CANCEL 非同期キャンセルが可能なスレッドを使用してはいけません |
POS51-C |
CONC.DL デッドロック CONC.NO_UNLOCK 変数のロック解除の欠落 |
POS52-C |
CONC.SLEEP クリティカルセクションで関数がブロックされる可能性があります |
POS54-C |
SV.RVT.RETVAL_NOTTESTED 戻り値の無視 |
PRE00-CPP |
MISRA.DEFINE.FUNC マクロが関数のように定義されています MISRA.USE.EXPANSION マクロの展開 |
PRE01-CPP |
MISRA.DEFINE.NOPARS マクロパラメーターに括弧がありません |
PRE04-CPP |
MISRA.STDLIB.WRONGNAME 標準ライブラリのマクロ、オブジェクトまたは関数の名前が再使用されています MISRA.STDLIB.WRONGNAME.UNDERSCORE 予約名が言語エンティティの名前に使用されています MISRA.UNDEF.WRONGNAME 標準ライブラリからの名前が定義されていません MISRA.UNDEF.WRONGNAME.UNDERSCORE 予約名が定義されていません |
PRE06-CPP |
MISRA.INCGUARD インクルードガードが入力されていません |
PRE07-CPP |
MISRA.CHAR.TRIGRAPH 3 文字表記の使用 |
PRE09-CPP |
SV.BANNED.RECOMMENDED.ALLOCA 禁止が推奨されているAPI: スタック割り当て関数 SV.BANNED.RECOMMENDED.NUMERIC 禁止が推奨されているAPI: 安全でない数値化関数 SV.BANNED.RECOMMENDED.OEM 禁止が推奨されているAPI: OEM 文字ページ変換関数 SV.BANNED.RECOMMENDED.PATH 禁止が推奨されているAPI: 安全でないパス名操作関数 SV.BANNED.RECOMMENDED.SCANF 禁止が推奨されているAPI: 安全でない scanf 型関数 SV.BANNED.RECOMMENDED.SPRINTF 禁止が推奨されているAPI: 安全でない sprintf 型関数 SV.BANNED.RECOMMENDED.STRLEN 禁止が推奨されているAPI: 安全でない文字列長関数 SV.BANNED.RECOMMENDED.TOKEN 禁止が推奨されているAPI: 安全でないトークン作成関数 SV.BANNED.RECOMMENDED.WINDOW 禁止が推奨されているAPI: 安全でないウィンドウ関数 SV.BANNED.REQUIRED.CONCAT 禁止が必須とされているAPI: 安全でない文字列連結関数 SV.BANNED.REQUIRED.COPY 禁止が必須とされているAPI: 安全でないバッファコピー関数 SV.BANNED.REQUIRED.GETS 禁止が必須とされているAPI: 安全でないストリーム読み取り関数 SV.BANNED.REQUIRED.ISBAD 禁止が必須とされているAPI: IsBad 型関数 SV.BANNED.REQUIRED.SPRINTF 禁止が必須とされているAPI: 安全でない sprintf 型関数 |
PRE30-C |
MISRA.DEFINE.SHARP マクロ定義に # 演算子または ## 演算子が使用されています |
PRE32-C |
MISRA.EXPANSION.DIRECTIVE マクロの引数内にディレクティブのようなトークンがあります |
SIG35-C |
CERT.STDLIB.SIGNAL 計算例外シグナルハンドラーから戻らない |
STR02-CPP |
NNTS.TAINTED 未検証のユーザー入力が原因のバッファオーバーフロー - 非 NULL 終了文字列 SV.TAINTED.INJECTION コマンドインジェクション |
STR03-CPP |
NNTS.MIGHT バッファオーバーフロー - 非 NULL 終了文字列 NNTS.MUST バッファオーバーフロー - 非 NULL 終了文字列 |
STR04-CPP |
MISRA.CHAR.NOT_CHARACTER 文字でない値に 'char' が使用されています |
STR06-CPP |
SV.BANNED.RECOMMENDED.TOKEN 禁止が推奨されているAPI: 安全でないトークン作成関数 |
STR07-CPP |
MISRA.CHAR.OPERAND 型 'char' または 'wchar_t' の式が文字以外のオペランドで使用されています |
STR30-C |
CERT.STR.ARG.CONST_TO_NONCONST const char ポインターを非 const char ポインター引数に渡さないでください CERT.STR.ASSIGN.CONST_TO_NONCONST const char ポインターを非 const char ポインターに割り当てないでください |
STR34-C |
CXX.CAST.SIGNED_CHAR_TO_INTEGER より大きな整数サイズに変換する前に char を unsigned char にキャストします |
STR37-C |
AUTOSAR.STDLIB.CCTYPE.UCHAR <cctype> で定義される文字処理関数の引数は、unsigned char として表現できなければなりません |
STR38-C |
CXX.DIFF.WIDTH.STR_AND_FUNC 関数の呼び出し時にナロー文字列とワイド文字列の間で暗黙のキャストが行われます |
STR50-CPP |
NNTS.MIGHT バッファオーバーフロー - 非 NULL 終了文字列 NNTS.MUST バッファオーバーフロー - 非 NULL 終了文字列 NNTS.TAINTED 未検証のユーザー入力が原因のバッファオーバーフロー - 非 NULL 終了文字列 SV.UNBOUND_STRING_INPUT.CIN バインドされていない文字列入力についての cin の使用法 |
STR51-CPP |
NPD.CHECK.CALL.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性のある関数に渡す可能性があります NPD.CHECK.CALL.MUST ポインタを明示的に NULL チェックした後に逆参照する可能性がある関数に渡します NPD.CHECK.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性があります NPD.CHECK.MUST ポインタを明示的に NULL チェックした後に逆参照します NPD.CONST.CALL 逆参照する可能性のある関数に NULL を渡しています NPD.CONST.DEREF NULL は逆参照されます NPD.FUNC.CALL.MIGHT NULL を返す関数の戻り値が、これを逆参照する可能性のある別の関数に渡される可能性があります NPD.FUNC.CALL.MUST NULL を返す関数の戻り値が、これを逆参照する可能性がある別の関数に渡されます NPD.FUNC.MIGHT NULL を返す可能性のある関数の戻り値が逆参照される場合があります NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます NPD.GEN.CALL.MIGHT NULLポインタを逆参照する可能性がある関数に渡す場合があります NPD.GEN.CALL.MUST NULLポインタを逆参照する関数に渡します NPD.GEN.MIGHT NULLポインタを逆参照する可能性があります NPD.GEN.MUST NULLポインタを逆参照します RNPD.CALL NULL チェック前のポインタの、関数呼び出しにおける逆参照は問題となる可能性があります RNPD.DEREF NULL チェック前のポインタの逆参照は問題となる可能性があります |