Klocwork および Klocwork community チェッカーにマッピングされた CERT C++ 規則

以下の表では、コンピューター緊急対応チーム (CERT) が定義しているセキュアコーディング基準にマッピングされた、Klocwork および Klocwork community C++ チェッカーをリストしています。

規則 チェッカー名と説明
ARR30-C (L2)

ABV.ANY_SIZE_ARRAY   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL.MULTIDIMENSION   バッファオーバーフロー - 配列インデックスが範囲外

ABV.NON_ARRAY   非配列オブジェクトが配列として使用されています

ABV.STACK   バッファオーバーフロー - ローカル配列インデックスが範囲外

ABV.TAINTED   未検証の入力によるバッファオーバーフロー

ABV.UNICODE.BOUND_MAP   文字関数のマッピング時のバッファオーバーフロー

ABV.UNICODE.FAILED_MAP   関数のマッピングに失敗しました

ABV.UNICODE.NNTS_MAP   文字関数のマッピング時のバッファオーバーフロー

ABV.UNICODE.SELF_MAP  関数のマッピングに失敗しました

ABV.UNKNOWN_SIZE   バッファオーバーフロー - 配列インデックスが範囲外

NNTS.MIGHT   バッファオーバーフロー - 非 null 終了文字列

NNTS.MUST   バッファオーバーフロー - 非 null 終了文字列

NNTS.TAINTED   未検証のユーザー入力が原因のバッファオーバーフロー - 非 null 終了文字列

NPD.FUNC.CALL.MIGHT   NULL を返す可能性がある関数の結果は、これを逆参照する可能性がある別の関数に渡される場合があります

SV.TAINTED.INDEX_ACCESS   配列インデックスとしての未検証整数の使用

SV.TAINTED.LOOP_BOUND   ループ条件での未検証整数の使用

ARR37-C(L2)

CERT.ARR.PTR.ARITH   演算式にポインターが使用されています

ARR38-C(L1)

ABV.GENERAL   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL.MULTIDIMENSION   バッファオーバーフロー - 配列インデックスが範囲外

ARR39-C(L2)

CERT.ARR.PTR.ARITH   演算式にポインターが使用されています

CON33-C(L3)

CERT.CONC.LIB_FUNC_USE   ライブラリ関数の使用時には競合状態を避ける

CON37-C(L2)

MISRA.STDLIB.SIGNAL   signal.h の信号処理装置の使用

CON40-C(L2)

CERT.CONC.ATOMIC_TWICE_EXPR   1 つの式でアトミック変数を 2 回参照しない

CON41-C(L3)

CERT.CONC.ATOMIC_COMP_FAIL_IN_LOOP   疑似的にループで起動に失敗する可能性のある関数はラップする

CON50-CPP(L3)

CERT.CONC.MUTEX.DESTROY_WHILE_LOCKED   ロックされている間はミューテックスを破棄しない

CON54-CPP(L3)

CERT.CONC.WAKE_IN_LOOP   疑似的にループで起動する可能性のある関数はラップする

CON55-CPP(L3)

CERT.CONC.UNSAFE_COND_VAR   条件変数の使用時にはスレッドセーフと活性を維持する

CTR50-CPP(L2)

ABV.ANY_SIZE_ARRAY   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL.MULTIDIMENSION   バッファオーバーフロー - 配列インデックスが範囲外

ABV.NON_ARRAY   非配列オブジェクトが配列として使用されています

ABV.STACK   バッファオーバーフロー - ローカル配列インデックスが範囲外

ABV.TAINTED   未検証の入力によるバッファオーバーフロー

SV.TAINTED.ALLOC_SIZE   メモリ割り当て時の未検証整数の使用

SV.TAINTED.CALL.INDEX_ACCESS   関数呼び出し時の配列インデックスとしての未検証整数の使用

SV.TAINTED.CALL.LOOP_BOUND   関数呼び出しのループ条件での未検証整数の使用

SV.TAINTED.INDEX_ACCESS   配列インデックスとしての未検証整数の使用

CTR51-CPP(L2)

ITER.CONTAINER.MODIFIED   無効な反復子の使用

CTR52-CPP(L1)

ITER.END.OUTPARAM.MIGHT   出力反復子としての 'end’ の使用

ITER.END.OUTPARAM.MUST   出力反復子としての 'end’ の使用

CTR55-CPP(L1)

ITER.ADVANCE.NONADJACENT   反復子間の距離は 1 より大きい値にする

DCL30-C(L2)

LOCRET.ARG   関数によってローカル変数のアドレスが返されました

LOCRET.GLOB   関数によってローカル変数のアドレスが返されました

LOCRET.RET   関数によってローカル変数のアドレスが返されました

DCL39-C(L3)

PORTING.STORAGE.STRUCT   構造体内の要素のバイト位置がアラインメントおよびパック属性に依存する可能性があります。

DCL40-C(L3)

MISRA.FUNC.PARAMS.IDENT   関数の宣言と定義の識別子が一致していません

DCL50-CPP(L1)

MISRA.FUNC.VARARG   関数に可変数の引数があります

DCL51-CPP(L3)

MISRA.DEFINE.WRONGNAME   標準ライブラリからの名前がマクロ名に使用されています

MISRA.DEFINE.WRONGNAME.UNDERSCORE   予約名がマクロ名に使用されています

MISRA.STDLIB.WRONGNAME   標準ライブラリのマクロ、オブジェクトまたは関数の名前が再使用されています

MISRA.STDLIB.WRONGNAME.UNDERSCORE   予約名が言語エンティティの名前に使用されています

MISRA.UNDEF.WRONGNAME   標準ライブラリからの名前が定義されていません

MISRA.UNDEF.WRONGNAME.UNDERSCORE   予約名が定義されていません

DCL52-CPP(L3)

CERT.DCL.REF_TYPE.CONST_OR_VOLATILE   参照型を const または volatile で修飾しない

DCL53-CPP(L3)

CERT.DCL.AMBIGUOUS_DECL   構文的に曖昧な宣言を記述しない

DCL54-CPP(L2)

CERT.DCL.SAME_SCOPE_ALLOC_DEALLOC   同一のスコープでペアとして割り当て関数と割り当て解除関数をオーバーロードする

DCL57-CPP(L2)

MISRA.DTOR.THROW   デストラクタにスローします

DCL58-CPP(L2)

CERT.DCL.STD_NS_MODIFIED   標準名前空間を変更しない

DCL59-CPP(L3)

MISRA.NAMESPACE.UNMD   ヘッダー ファイルに名前のない名前空間があります

ENV30-C(L3)

CXX.STDLIB.ILLEGAL_WRITE   標準ライブラリ関数 localeconv、getenv、setlocale、または strerror が返すポインターは、必ずそれらが const-qualified 型を指すポインターを持つかのように使用する必要があります

ENV32-C(L1)

CERT.EXIT.HANDLER_TERMINATE   すべての exit ハンドラーは正常に戻る必要があります

ENV33-C(L1)

SV.CODE_INJECTION.SHELL_EXEC   シェル実行へのコマンド挿入

ENV34-C(L3)

CXX.STDLIB.ILLEGAL_REUSE   標準ライブラリ関数 asctime または同様の関数によって返されるポインターは、同じ関数の後続の呼び出しに続いては使用しません

ERR30-C(L2)

CXX.ERRNO.INCORRECTLY_CHECKED    ライブラリ関数を呼び出した後に、errno の条件チェックは不要です

CXX.ERRNO.NOT_CHECKED   ライブラリ関数を呼び出した後に、errno の条件チェックが欠落しています

CXX.ERRNO.NOT_SET   ライブラリ関数を呼び出す前に、errno がゼロにリセットされていません

ERR32-C(L3)

MISRA.INCL.SIGNAL.2012   標準ヘッダーファイル signal.h は使用しない

MISRA.STDLIB.SIGNAL   signal.h の信号処理装置の使用

ERR33-C(L1)

NPD.CHECK.MUST   ポインターは、NULL について適切にチェックされた後に逆参照されます

NPD.FUNC.MUST   NULL を返す可能性がある関数の結果は逆参照されます

SV.RVT.RETVAL_NOTTESTED   戻り値の無視

ERR34-C(L3)

CERT.ERR.CONV.STR_TO_NUM   文字列を数値に変換する際にエラーを検出する

MISRA.STDLIB.ATOI   ライブラリ stdlib.h の 'atof'、'atoi'、または 'atol' の使用

SV.BANNED.RECOMMENDED.SCANF   禁止されている推奨 API: 安全でない scanf 型関数

ERR50-CPP(L3)

CERT.ERR.ABRUPT_TERM   突然プログラムを終了しない

MISRA.TERMINATE   terminate() 関数が明示的に呼び出されています

ERR51-CPP(L3)

MISRA.CATCH.ALL   try-catch ブロックに省略記号例外ハンドラーがありません

ERR52-CPP(L3)

MISRA.STDLIB.LONGJMP   setjmp マクロまたは longjmp 関数の使用

ERR53-CPP(L3)

MISRA.CTOR.TRY.NON_STATIC   コンストラクタまたはデストラクタの関数 try-catch ブロックで、非スタティックなメンバーを参照しています

ERR54-CPP(L1)

MISRA.CATCH.NOALL   省略記号例外ハンドラーが try-catch ブロックの最後に置かれていません

MISRA.CATCH.WRONGORD   try-catch ブロックでベース例外クラスのハンドラーが派生例外クラスのハンドラーに先行しています

ERR57-CPP(L3)

CL.MLK   メモリリーク - デストラクター内

MLK.MIGHT   メモリリーク - 可能性あり

MLK.MUST   メモリリーク

MLK.RET.MIGHT   メモリリーク - 可能性あり

MLK.RET.MUST   メモリリーク

RH.LEAK   リソースリーク

ERR59-CPP(L1)

CERT.EXCEPTION.OVER.BOUNDARY   実行境界を越えて例外がスローされました。

ERR61-CPP(L3)

MISRA.CATCH.BY_VALUE   クラスタイプの例外オブジェクトが値によってキャッチされています

ERR62-CPP(L3)

CERT.ERR.CONV.STR_TO_NUM   文字列を数値に変換する際にエラーを検出する

EXP34-C(L1)

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(L3)

CXX.CAST.OBJ_PTR_TO_OBJ_PTR   オブジェクト型へのポインターと異なるオブジェクト型へのポインター間のキャストです

EXP42-C(L2)

CERT.MEMCMP.PADDED_DATA   パディングデータを比較しない

EXP45-C(L2)

ASSIGCOND.CALL   割り当て条件 (呼び出し)

ASSIGCOND.GEN   割り当て条件

MISRA.ASSIGN.COND   条件内で代入演算子が使用されています

EXP46-C(L2)

MISRA.LOGIC.OPERATOR.NOT_BOOL   論理演算ではない演算子のオペランドが実質的にはブール値です

EXP47-C(L2)

CERT.VA_ARG.TYPE   正しくない型の引数で va_arg を呼び出さないでください

EXP50-CPP(L2)

CERT.EXPR.PARENS   式内の演算子の優先順位を明示する必要があります。

MISRA.EXPR.PARENS.INSUFFICIENT   式の演算子優先順位規則に、制限された依存性が必要です。

MISRA.INCR_DECR.OTHER   増分または減分の演算子がその他の演算子と混合して式で使用されています

PORTING.VAR.EFFECTS   1 回の使用が副次的な影響を受けるひとつの式で、変数が 2 回使用されています

EXP51-CPP(L3)

CERT.EXPR.DELETE_ARR.BASE_PTR   不正な型のポインターを使用して配列を削除しない

EXP52-CPP(L3)

MISRA.SIZEOF.SIDE_EFFECT   sizeof のオペランドに副作用があります

EXP53-CPP(L1)

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(L2)

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(L2)

MISRA.CAST.CONST   キャスト演算により定数または可変修飾子がポインターまたは参照から除外されます

EXP56-CPP(L3)

MISRA.CAST.PTR.UNRELATED   ポインター型のオブジェクトが関連のない型にキャストされています

MISRA.CAST.PTR_TO_INT   ポインターと整数型の間のキャストです

PORTING.CAST.PTR   両方ともポインターであるかポインターでない型の間のキャスト

PORTING.CAST.PTR.FLTPNT   浮動小数点以外の型のポインターへの浮動小数点式のポインターのキャスト

PORTING.CAST.PTR.SIZE   サイズに互換性がない可能性がある型への式のキャストを試行しました

EXP57-CPP(L3)

CERT.EXPR.DELETE_PTR.INCOMPLETE_TYPE   不完全な型のポインターを削除しない

EXP58-CPP(L3)

CERT.VA_START.TYPE   正しい型のオブジェクトを va_start に渡します

EXP60-CPP(L1)

CERT.EXPR.PASS_NON_STD_LAYOUT   実行境界を超えて標準ではないレイアウトタイプオブジェクトを渡さないでください

EXP61-CPP(L2)

LOCRET.RET   関数によってローカル変数のアドレスが返されました

EXP62-CPP(L2)

CERT.MEMCMP.PADDED_DATA   パディングデータを比較しない

CWARN.MEM.NONPOD   非 POD オブジェクトに適用されるメモリ操作ルーチン

FIO30-C(L1)

SV.FMTSTR.GENERIC   書式文字列の脆弱性

SV.TAINTED.FMTSTR   書式文字列での未検証データの使用

FIO34-C(L1)

CWARN.CMPCHR.EOF   'char' 式が EOF 定数と比較されます

FIO37-C(L1)

CERT.FIO.FGETS   fgets() または fgetws() が正常に実行された場合に空でない文字列が返されることを想定しない

FIO38-C(L3)

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(L2)

CERT.FIO.NO_FLUSH   フラッシュまたは位置調整の関数呼び出しの欠如

FIO42-C(L3)

RH.LEAK   リソースリーク

FIO44-C(L3)

CERT.FSETPOS.VALUE   fsetpos() には fgetpos() から返される値のみを使用する

FIO45-C(L2)

SV.TOCTOU.FILE_ACCESS   ファイルアクセス時の作成日時/使用日時の競合状態

FIO46-C(L3)

SV.INCORRECT_RESOURCE_HANDLING.URH   安全でないリソース処理

FIO47-C(L2)

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(L3)

RH.LEAK   リソースリーク

FLP30-C(L2)

MISRA.FOR.COUNTER.FLT   for ループのカウンターが浮動小数点型です

FLP34-C(L3)

MISRA.CAST.FLOAT.WIDER   より幅広い浮動小数点型への浮動小数点式のキャスト

MISRA.CAST.FLOAT_INT   整数型への浮動小数点式のキャスト

MISRA.CAST.INT_FLOAT   浮動小数点型への整数式のキャスト

MISRA.CONV.FLOAT   暗黙的な浮動小数点変換です

FLP36-C(L3)

PORTING.CAST.FLTPNT   浮動小数点以外の型への浮動小数点式のキャスト

FLP37-C(L3)

CERT.MEMCMP.FLOAT_MEMBER   メンバーが浮動小数点の場合、比較しないでください

INT30-C(L2)

CWARN.NOEFFECT.OUTOFRANGE   範囲外の値

NUM.OVERFLOW   可能性のあるオーバーフロー

NUM.OVERFLOW.DF   起こり得る数値のオーバーフローまたはラップアラウンド

INT31-C(L2)

PORTING.CAST.SIZE   式が異なるサイズの可能性がある型にキャストされています

INT32-C(L2)

CWARN.NOEFFECT.OUTOFRANGE   範囲外の値

NUM.OVERFLOW   可能性のあるオーバーフロー

NUM.OVERFLOW.DF   起こり得る数値のオーバーフローまたはラップアラウンド

INT33-C(L2)

DBZ.CONST   ゼロ定数による除算が発生しました

DBZ.CONST.CALL   値 '0' が除数としてこの値を使用できる関数に渡されます

DBZ.GENERAL   ゼロ除算が発生した可能性があります

DBZ.ITERATOR   ループ反復子でゼロ除算が発生した可能性があります

DBZ.ITERATOR.CALL   関数呼び出しでゼロ除算が発生した可能性があります

INT34-C(L3)

MISRA.SHIFT.RANGE.2012   シフト演算の右側のオペランドが範囲外 (左側のオペランドの必須型サイズ以上か、または負) です

MEM30-C(L1)

UFM.DEREF.MIGHT   空きメモリの使用 (アクセス) - 可能性あり

UFM.DEREF.MUST   ポインターによる解放されたメモリの使用

UFM.FFM.MIGHT   空きメモリの使用 (二重解放) - 可能性あり

UFM.FFM.MUST   解放されたメモリの解放

UFM.RETURN.MIGHT   解放されたメモリの使用 (復帰) - 可能性あり

UFM.RETURN.MUST   復帰時の解放されたメモリの使用

UFM.USE.MIGHT   空きメモリの使用 - 可能性あり

UFM.USE.MUST   解放されたメモリの使用

MEM31-C(L2)

CL.FFM.ASSIGN   空きメモリの使用 (二重解放) - operator= なし

CL.FFM.COPY   空きメモリの使用 (二重解放) - コピーコンストラクタなし

CL.SHALLOW.ASSIGN   空きメモリの使用 (二重解放) - 演算子 = での形式的なコピー

CL.SHALLOW.COPY   空きメモリの使用 (二重解放) - コピーコンストラクタでの形式的なコピー

FMM.MIGHT   不一致メモリの解放 - 可能性あり

FMM.MUST   不一致メモリの解放

MEM34-C(L1)

FNH.MIGHT   非ヒープメモリの解放 - 可能性あり

FNH.MUST   非ヒープメモリの解放

MEM35-C(L2)

INCORRECT.ALLOC_SIZE   不適切な割り当てサイズ

SV.TAINTED.ALLOC_SIZE   メモリ割り当て時の未検証整数の使用

MEM36-C(L3)

AUTOSAR.STDLIB.MEMORY   関数 malloc、calloc、realloc、および free は使用してはなりません

MEM50-CPP(L1)

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(L1)

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(L1)

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 チェック前のポインターの不審な逆参照

MEM53-CPP(L1)

CERT.MEM.OBJ_LIFETIME_CTOR   初期化されていない heap メンバー関数の呼び出し

CERT.MEM.OBJ_LIFETIME_DTOR   手動で割り当てられたメモリを持つオブジェクトは明示的に破棄されない

MEM54-CPP(L1)

CERT.MEM.PLACEMENTNEW.MISALIGNED   アライメントが適切なストレージを placement new に指定する

CERT.MEM.PLACEMENTNEW.TOOSMALL   十分なストレージを placement new に指定する

MEM55-CPP(L1)

CERT.MEM.OVERRIDE.DELETE   'delete' に関する代替の動的ストレージ管理要件を遵守する

CERT.MEM.OVERRIDE.NEW   'new' に関する代替の動的ストレージ管理要件を遵守する

MEM56-CPP(L1)

CERT.MEM.SMART_PTR.OWNED   複数のスマートポインターでのポインター所有者

CERT.MEM.SMART_PTR.OWNED.THIS   基礎となるリソースが無関係なスマートポインターによって既に所有されている可能性がある

MSC30-C(L2)

CERT.MSC.STD_RAND_CALL   疑似乱数の生成に std::rand() を使用しない

MSC32-C(L1)

CERT.MSC.SEED_RANDOM   疑似乱数ジェネレータを適切にシードする

MSC33-C(L1)

CERT.MSC.ASCTIME   asctime() 関数に無効なデータを渡さない

MSC37-C(L2)

FUNCRET.GEN   非 void 関数によって値が返されません

FUNCRET.IMPLICIT   暗黙的に int を返す非 void 関数によって値が返されません

MSC39-C(L3)

VA.LIST.INDETERMINATE   不定値がある va_list で va_arg() を呼び出そうとしています

MSC40-C(L3)

MISRA.FUNC.STATIC.REDECL   関数またはオブジェクトの再宣言に 'static' 修飾子がありません

MSC41-C(L1)

CXX.SV.PWD.PLAIN   プレーンな文字列を使用してパスワードを設定しようとしています

CXX.SV.PWD.PLAIN.LENGTH   15 文字未満の長さでパスワードを設定しようとしています

CXX.SV.PWD.PLAIN.LENGTH.ZERO   ゼロ文字の長さでパスワードを設定しようとしています

HCC   ハードコードされた資格情報の使用

HCC.PWD   ハードコードされたパスワードの使用

HCC.USER   ハードコードされたユーザー名の使用

MSC50-CPP(L2)

CERT.MSC.STD_RAND_CALL   疑似乱数の生成に std::rand() を使用しない

MSC51-CPP(L1)

AUTOSAR.STDLIB.RANDOM.NBR_GEN_DEFAULT_INIT   乱数エンジンはデフォルトで初期化してはなりません

MSC52-CPP(L2)

FUNCRET.GEN   非 void 関数によって値が返されません

FUNCRET.IMPLICIT   暗黙的に int を返す非 void 関数によって値が返されません

MSC53-CPP(L3)

CERT.MSC.NORETURN_FUNC_RETURNS   [[noreturn]] と宣言された関数から返さない

MSC54-CPP(L2)

CERT.MSC.SIG_HANDLER.POF   シグナルハンドラーは古いプレーン関数でなければならない

OOP50-CPP(L3)

CERT.OOP.CTOR.VIRTUAL_FUNC   コンストラクタまたはデストラクタから仮想関数を呼び出さない

OOP52-CPP(L2)

CL.MLK.VIRTUAL   メモリリーク - デストラクター内での発生の可能性

CWARN.DTOR.NONVIRT.DELETE   仮想メソッドを持ち、仮想デストラクタを持たないオブジェクトの式が削除されます

OOP53-CPP(L3)

CERT.OOP.CTOR.INIT_ORDER   コンストラクタメンバー初期化子は正規の順序で記述する

OOP54-CPP(L3)

CL.SELF-ASSIGN   空きメモリの使用 (二重解放) - operator= 内

OOP55-CPP(L2)

CERT.OOP.PTR_MEMBER.NO_MEMBER   メンバー演算子のポインターを使用して存在しないメンバーにアクセスしない

OOP57-CPP(L2)

CERT.OOP.CSTD_FUNC_USE   C 標準ライブラリ関数よりも特殊メンバー関数とオーバーロードされた演算子を優先させる

OOP58-CPP(L2)

CERT.OOP.COPY_MUTATES   コピー操作によってソースオブジェクトを変異させてはならない

POS30-C(L1)

ABV.GENERAL   バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL.MULTIDIMENSION   バッファオーバーフロー - 配列インデックスが範囲外

POS34-C(L2)

CERT.PUTENV.AUTO_VARIABLE   自動変数へのポインターを引数として putenv() を呼び出さない

POS35-C(L1)

CERT.STR.ASSIGN.CONST_TO_NONCONST   const char ポインターを非 const char ポインターに割り当てないでください

SV.TOCTOU.FILE_ACCESS   ファイルアクセス時の作成日時/使用日時の競合状態

POS36-C(L1)

SV.USAGERULES.PERMISSIONS   特権昇格の使用

POS37-C(L1)

SV.USAGERULES.PERMISSIONS   特権昇格の使用

POS39-C(L1)

BYTEORDER.HTON.SEND   ホストからネットワークへのバイトオーダーへの変換がありません

BYTEORDER.HTON.WRITE   ホストからネットワークへのバイトオーダーへの変換がありません

BYTEORDER.NTOH.READ   ネットワークからホストへのバイトオーダーへの変換がありません

BYTEORDER.NTOH.RECV   ネットワークからホストへのバイトオーダーへの変換がありません

POS44-C(L2)

MISRA.INCL.SIGNAL.2012   標準ヘッダーファイル signal.h は使用しない

POS47-C(L1)

CERT.POS.THREAD.ASYNC_CANCEL   非同期的に取り消される可能性があるスレッドを使用しない

POS51-C(L3)

CONC.DL   デッドロック

CONC.NO_UNLOCK   変数に欠落しているアンロック

POS52-C(L3)

CONC.SLEEP   関数がクリティカルセクションでブロックしている可能性があります

POS54-C(L1)

SV.RVT.RETVAL_NOTTESTED   戻り値の無視

PRE30-C(L3)

MISRA.DEFINE.SHARP   マクロ定義に # 演算子または ## 演算子が使用されています

PRE31-C(L3)

PORTING.VAR.EFFECTS   1 回の使用が副次的な影響を受けるひとつの式で、変数が 2 回使用されています

PRE32-C(L3)

MISRA.EXPANSION.DIRECTIVE   マクロの引数内にディレクティブのようなトークンがあります

SIG34-C(L3)

MISRA.STDLIB.SIGNAL   signal.h の信号処理装置の使用

SIG35-C(L3)

CERT.STDLIB.SIGNAL   計算例外シグナルハンドラーから戻らないでください

STR30-C(L2)

CERT.STR.ARG.CONST_TO_NONCONST   const char ポインターを非 const char ポインター引数に渡さないでください

CERT.STR.ASSIGN.CONST_TO_NONCONST   const char ポインターを非 const char ポインターに割り当てないでください

STR31-C(L1)

SV.FMT_STR.BAD_SCAN_FORMAT   入力書式指定子エラー

SV.UNBOUND_STRING_INPUT.FUNC   バウンドされない文字列入力の使用

STR32-C(L1)

NNTS.MIGHT   バッファオーバーフロー - 非 null 終了文字列

NNTS.MUST   バッファオーバーフロー - 非 null 終了文字列

SV.STRBO.BOUND_COPY.UNTERM   次の文字列演算でバッファオーバーフローの可能性があります

STR34-C(L2)

CXX.CAST.SIGNED_CHAR_TO_INTEGER   より大きな整数サイズに変換する前に文字を unsigned char にキャストする

STR37-C(L3)

AUTOSAR.STDLIB.CCTYPE.UCHAR   <cctype> で定義される文字処理関数の引数は、unsigned char として表現できなければなりません

STR38-C(L1)

CXX.DIFF.WIDTH.STR_AND_FUNC   関数の呼び出し時にナロー文字列とワイド文字列の間で暗黙のキャストが行われます

STR50-CPP(L1)

NNTS.MIGHT   バッファオーバーフロー - 非 null 終了文字列

NNTS.MUST   バッファオーバーフロー - 非 null 終了文字列

NNTS.TAINTED   未検証のユーザー入力が原因のバッファオーバーフロー - 非 null 終了文字列

SV.UNBOUND_STRING_INPUT.CIN   バウンドされない文字列入力への cin の使用

STR51-CPP(L1)

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 チェック前のポインターの不審な逆参照

"MISRA"、"MISRA C" および、"MISRA C++" は、The MISRA Consortium Limited の登録商標です。​