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   バインドされていない文字列入力の使用法