Klocwork および Klocwork community チェッカーにマッピングされた Automotive Development 向け Hyundai-Kia Motor Corp (HKMC) セキュア C++ コーディング基準
ガイドライン | チェッカー名および説明 |
---|---|
P-CON-001 |
CERT.CONC.MUTEX.DESTROY_WHILE_LOCKED ロックされている間はミューテックスを破棄しないでください |
P-CON-005 |
CERT.CONC.WAKE_IN_LOOP 擬似的にループを起動する可能性のあるラップ関数 |
P-CON-006 |
CERT.CONC.UNSAFE_COND_VAR 条件変数の使用時に、スレッドセーフと活性を維持します |
P-CTR-001 |
ABV.ANY_SIZE_ARRAY バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.STACK バッファオーバーフロー - ローカル配列インデックスが範囲外 ABV.TAINTED 未検証の入力によるバッファオーバーフロー SV.TAINTED.ALLOC_SIZE メモリ割り当て時の未検証の整数の使用 SV.TAINTED.CALL.INDEX_ACCESS 関数呼び出し時の配列インデックスとしての未検証の整数の使用 SV.TAINTED.CALL.LOOP_BOUND 関数呼び出しのループ条件での未検証の整数の使用 SV.TAINTED.INDEX_ACCESS 配列インデックスとしての未検証の整数の使用 |
P-CTR-002 |
ITER.CONTAINER.MODIFIED 無効な反復子の使用 |
P-CTR-004 |
CXX.ITER.END.BEGIN 範囲の終わりを表す反復子が範囲の始まりの前にあります ITER.INAPPROPRIATE コンテナーオブジェクトが不適切な反復子の使用 |
P-DCL-001 |
MISRA.FUNC.VARARG 関数が可変数の引数を持っています |
P-DCL-002 |
MISRA.DEFINE.WRONGNAME.UNDERSCORE 予約名がマクロ名に使用されています MISRA.STDLIB.WRONGNAME 標準ライブラリのマクロ、オブジェクトまたは関数の名前が再使用されています MISRA.STDLIB.WRONGNAME.UNDERSCORE 予約名が言語エンティティの名前に使用されています |
P-DCL-003 |
CERT.DCL.REF_TYPE.CONST_OR_VOLATILE 参照型を const または volatile で修飾しないでください |
P-DCL-004 |
CERT.DCL.AMBIGUOUS_DECL 構文的に曖昧な宣言を作成しないでください |
P-DCL-005 |
CERT.DCL.SAME_SCOPE_ALLOC_DEALLOC 同一のスコープ内のペアとしての割り当ておよび割り当て解除関数をオーバーロードします |
P-DCL-006 |
PORTING.STORAGE.STRUCT 構造の要素のバイト位置が配置属性およびパッケージ属性に依存している可能性があります。 |
P-DCL-007 |
CXX.STATIC.OBJ.RECURSION 静的オブジェクトの初期化中に関数を再入力しないでください |
P-DCL-008 |
MISRA.DTOR.THROW デストラクタにスローします |
P-DCL-009 |
CERT.DCL.STD_NS_MODIFIED 標準名前空間を変更しないでください |
P-DCL-010 |
MISRA.NAMESPACE.UNMD ヘッダーファイルに名前のない名前空間があります |
P-DCL-011 |
AUTOSAR.ADD.ONEDEFRULE.FUNC 関数が一定義規則に違反しています AUTOSAR.ADD.ONEDEFRULE.VAR 変数が一定義規則に違反しています MISRA.BASE.IDS.UNIQUE 継承階層でメンバー名が 2 回使用されています MISRA.BASE.MANYDEFS オーバーライドする関数とオーバーライドされる仮想関数の両方で定義があります MISRA.CT.UNIQUE.ID 識別子がタグ名と不整合です MISRA.TYPE.NAMECLASH.CPP.2008 ある名前空間の識別子が他の名前空間の識別子と同じスペルです MISRA.TYPEDEF.NOT_UNIQUE Typedef 名がその他のエンティティ用に使用されています MISRA.VAR.HIDDEN 内部のスコープで宣言された識別子によって外部のスコープの識別子が非表示になっています MISRA.VAR.UNIQUE.STATIC 静的ストレージ指定の識別子がその他の識別子と不整合です |
P-ERR-001 |
CERT.ERR.ABRUPT_TERM 突然プログラムを終了しないでください MISRA.CATCH.ALL try-catch ブロックに省略記号例外ハンドラーがありません |
P-ERR-002 |
MISRA.CATCH.ALL try-catch ブロックに省略記号例外ハンドラーがありません |
P-ERR-003 |
MISRA.STDLIB.LONGJMP setjmp マクロまたは longjmp 関数の使用 |
P-ERR-004 |
MISRA.CTOR.TRY.NON_STATIC コンストラクタまたはデストラクタの関数 try-catch ブロックが非スタティックなメンバーを参照しています |
P-ERR-005 |
MISRA.CATCH.NOALL 省略記号例外ハンドラーが try-catch ブロックの最後に置かれていません MISRA.CATCH.WRONGORD try-catch ブロックで基本例外クラスのハンドラーが派生例外クラスのハンドラーよりも先に置かれています |
P-ERR-008 |
CL.MLK メモリリーク - デストラクタで発生 CL.MLK.ASSIGN メモリリーク - 代入演算子 CL.MLK.VIRTUAL メモリリーク - デストラクタで発生している可能性 FREE.INCONSISTENT メモリの解放が矛盾しています MLK.MIGHT メモリリークの可能性 MLK.MUST メモリリーク MLK.RET.MIGHT メモリリークの可能性 MLK.RET.MUST メモリリーク |
P-ERR-010 |
MISRA.CATCH.BY_VALUE クラス タイプの例外オブジェクトが値によってキャッチされています |
P-ERR-011 |
CERT.ERR.CONV.STR_TO_NUM 文字列を数値に変換する際にエラーを検出する |
P-EXP-001 |
MISRA.EXPR.PARENS MISRA.EXPR.PARENS.INSUFFICIENT 式の演算子優先規則に制限された依存性が必要です MISRA.EXPR.PARENS.REDUNDANT 式の演算子優先規則に制限された依存性が必要です MISRA.INCR_DECR.OTHER 増分または減分の演算子がその他の演算子と混合して式で使用されています PORTING.VAR.EFFECTS ある使用法が副次的な影響を受ける式で変数が 2 回使用されています |
P-EXP-002 |
CERT.EXPR.DELETE_ARR.BASE_PTR 不正な型のポインターを使用して配列を削除しないでください |
P-EXP-003 |
MISRA.SIZEOF.SIDE_EFFECT sizeof のオペランドに副作用があります |
P-EXP-004 |
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 未初期化の変数 |
P-EXP-005 |
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 未初期化の変数 |
P-EXP-006 |
MISRA.CAST.CONST キャスト演算により const または volatile がポインターまたは参照から除外されます。 |
P-FIO-002 |
RH.LEAK リソースリーク |
P-MEM-001 |
UFM.DEREF.MIGHT 解放済みメモリの逆参照の可能性 UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 |
P-MEM-002 |
CL.FFM.ASSIGN 解放済みメモリの使用 (二重解放) - operator= が無いため CL.FFM.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため CL.FMM メモリの解放の不一致 - デストラクタで発生 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 未初期化のヒープの使用 UNINIT.STACK.ARRAY.MIGHT 未初期化の配列の可能性 UNINIT.STACK.ARRAY.MUST 未初期化の配列 UNINIT.STACK.ARRAY.PARTIAL.MUST 一部が未初期化の配列 UNINIT.STACK.MIGHT 未初期化の変数の可能性 UNINIT.STACK.MUST 未初期化の変数 |
P-MEM-003 |
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 チェック前のポインタの逆参照は問題となる可能性があります |
P-MEM-007 |
MLK.MIGHT メモリリークの可能性 MLK.MUST メモリリーク MLK.RET.MIGHT メモリリークの可能性 MLK.RET.MUST メモリリーク RH.LEAK リソースリーク |
P-MSC-001 |
CERT.MSC.STD_RAND_CALL 疑似乱数の生成に std::rand() を使用しないでください |
P-MSC-002 |
CERT.MSC.SEED_RANDOM 疑似乱数ジェネレータを適切にシードする |
P-MSC-003 |
FUNCRET.GEN 非 void 関数に戻り値がありません |
P-MSC-004 |
CERT.MSC.NORETURN_FUNC_RETURNS [[noreturn]] と宣言された関数から返さないでください |
P-MSC-005 |
LOCRET.RET 関数がローカル変数のアドレスを返しています |
P-OOP-001 |
MISRA.CTOR.DYNAMIC オブジェクトの動的タイプがそのコンストラクタのボディから使用されています MISRA.DTOR.DYNAMIC オブジェクトの動的タイプがそのデストラクタのボディから使用されています |
P-OOP-003 |
CL.MLK.VIRTUAL メモリリーク - デストラクタで発生している可能性 CWARN.DTOR.NONVIRT.DELETE 仮想メソッドを持ち、仮想デストラクタを持たないクラスのオブジェクトの式を削除しています |
P-OOP-004 |
CERT.OOP.CTOR.INIT_ORDER コンストラクターメンバー初期化子を正規の順序で作成します |
P-OOP-005 |
CL.SELF-ASSIGN 解放済みメモリの使用 (二重解放) - operator= |
P-OOP-006 |
CERT.OOP.PTR_MEMBER.NO_MEMBER メンバー演算子へのポインターを使用して、存在しないメンバーにアクセスしないでください |
P-OOP-007 |
CERT.OOP.CSTD_FUNC_USE C 標準ライブラリ関数よりも特殊メンバー関数とオーバーロードされた演算子を優先します |
P-OOP-008 |
CERT.OOP.COPY_MUTATES コピー操作でソースオブジェクトを変更してはいけません |
P-OOP-009 |
CXX.STATIC.OBJ.FINAL 初期化されたパブリック静的フィールドは最終としてマークされていません |
P-OOP-010 |
CXX.MEMBER.IMPORTANT.PRIVATE 重要なメンバーデータはプライベートにすべきです |
P-OOP-011 |
CXX.MEMBER.CRITICAL.PUBLIC.METHOD 重大なプライベートメンバーデータは、パブリックメソッドによって直接書き込み可能であってはなりません |
P-STR-001 |
NNTS.MIGHT バッファオーバーフロー - 非 NULL 終了文字列 NNTS.TAINTED 未検証のユーザー入力が原因のバッファオーバーフロー - 非 NULL 終了文字列 |
P-STR-002 |
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 チェック前のポインタの逆参照は問題となる可能性があります |
P-STR-003 |
ITER.CONTAINER.MODIFIED 無効な反復子の使用 |
P-STR-004 |
ABV.ANY_SIZE_ARRAY バッファオーバーフロー - 配列インデックスが範囲外 ABV.GENERAL バッファオーバーフロー - 配列インデックスが範囲外 ABV.ITERATOR バッファオーバーフロー - 配列インデックスが範囲外の可能性 ABV.MEMBER バッファオーバーフロー - 配列インデックスが範囲外 ABV.STACK バッファオーバーフロー - ローカル配列インデックスが範囲外 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 終了文字列 RABV.CHECK 境界チェック前のインデックスの不審な使用 RN.INDEX 負の値のチェック前のインデックスの使用は問題となる可能性があります SV.FMT_STR.BAD_SCAN_FORMAT 入力書式指定子エラー SV.STRBO.BOUND_COPY.OVERFLOW バインドされた文字列コピーでのバッファオーバーフロー SV.STRBO.BOUND_COPY.UNTERM 次の文字列演算でバッファオーバーフローの可能性があります SV.STRBO.BOUND_SPRINTF バインドされた sprintf でのバッファオーバーフロー SV.STRBO.UNBOUND_COPY バインドされていない文字列コピーでのバッファオーバーフロー SV.STRBO.UNBOUND_SPRINTF バインドされていない sprintf でのバッファオーバーフロー SV.UNBOUND_STRING_INPUT.CIN バインドされていない文字列入力についての cin の使用法 SV.UNBOUND_STRING_INPUT.FUNC バインドされていない文字列入力の使用法 |