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 の登録商標です。