CERT C ガイドライン

以下の表は、CERT C ガイドラインと Klocwork C チェッカーの対応関係を示しています。

ガイドライン チェッカー名および説明
CERT 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  ループ条件での未検証の整数の使用

CERT ARR32-C (L3): 可変長配列のサイズ引数を有効な範囲に収める

MISRA.ARRAY.VAR_LENGTH.2012  変数の長さの配列種類は使用しないでください

CERT ARR36-C (L3): 同じ配列を参照していない 2 つのポインターで減算や比較を行わない

MISRA.PTR.ARITH  代数式または配列インデックス式でポインタが使用されています

CERT ARR37-C (L2): 配列以外のオブジェクトを指すポインターに対して整数の加算や減算を行わない

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

CERT ARR38-C (L2): ライブラリ関数が無効なポインターを形成しないことを保証する

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

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

CERT ARR39-C (L2): ポインターに対してスケーリングされた整数の加算や減算を行わない

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

CERT CON30-C (L3): スレッド固有のストレージをクリーンアップする
CERT CON31-C (L3): ロックされている間はミューテックスを破棄しない
CERT CON32-C (L3): 複数のスレッドからビットフィールドにアクセスする場合はデータ競合を防止する
CERT CON33-C (L3): ライブラリ関数の使用時には競合状態を避ける

CERT.CONC.LIB_FUNC_USE  ライブラリ関数の使用時には競合状態を避けてください

CERT CON34-C (L3): スレッド間で共有されるオブジェクトは適切な保持期間を指定して宣言する
CERT CON35-C (L3): 事前定義された順序でロックすることによりデッドロックを回避する

CONC.DL  デッドロック

CONC.NO_UNLOCK  変数のロック解除の欠落

CERT CON36-C (L3): 疑似的にループで起動する可能性のある関数はラップする

CERT.CONC.WAKE_IN_LOOP_C  擬似的にループを起動する可能性のあるラップ関数

CERT CON37-C (L3): マルチスレッドプログラムで signal() を呼び出さない

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

CERT CON38-C (L3): 条件変数の使用時にはスレッドセーフと活性を維持する

CERT.CONC.UNSAFE_COND_VAR_C  条件変数の使用時に、スレッドセーフと活性を維持します

CERT CON39-C (L3): 以前に結合または切り離されたスレッドを結合したり、切り離したりしない
CERT CON40-C (L2): 1 つの式でアトミック変数を 2 回参照しない

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

CERT CON41-C (L3): 疑似的にループで失敗する可能性のある関数はラップする

CERT.CONC.ATOMIC_COMP_FAIL_IN_LOOP  ループで疑似的に失敗する可能性のある関数はラップしてください

CERT CON43-C (L3): マルチスレッドコードでデータ競合を許可しない
CERT DCL30-C (L2): 適切なストレージ期間のオブジェクトを宣言する

LOCRET.ARG  関数がローカル変数のアドレスを返しています

LOCRET.GLOB  関数がローカル変数のアドレスを返しています

LOCRET.RET  関数がローカル変数のアドレスを返しています

CERT DCL31-C (L3): 識別子を使用する前に宣言する

CWARN.IMPLICITINT  古い用法の 'implicit int'

MISRA.DECL.NO_TYPE  宣言から型が抜けています

MISRA.FUNC.NOPROT.CALL  関数が呼び出されていますが、プロトタイプがありません

RETVOID.IMPLICIT  暗黙的な int 関数によって void 値が返されます

CERT DCL36-C (L2): 競合するリンク分類を持つ識別子を宣言しない

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

CERT DCL37-C (L3): 予約済みの識別子を宣言または定義しない

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

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

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

CERT DCL38-C (L3): フレキシブル配列メンバーの宣言時には正しい構文を使用する

CERT.STRUCT.FLEXIBLE_ARRAY_MEMBER  フレキシブル配列メンバーの宣言時には正しい構文を使用する

CERT DCL39-C (L3): 信頼境界を越えて構造を渡すときに情報のリークを避ける

PORTING.STORAGE.STRUCT  構造の要素のバイト位置が配置属性およびパッケージ属性に依存している可能性があります。

CERT DCL40-C (L3): 同一の関数やオブジェクトに対して互換性のない宣言を行わない

MISRA.FUNC.NOPROT.DEF.2012  関数は定義されていますが、プロトタイプがありません

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

CERT DCL41-C (L2): switch ステートメント内では最初の case ラベルより前で変数を宣言しない

CERT.DCL.SWITCH.VAR_BEFORE_CASE  switch ステートメント内では最初の case ラベルより前で変数を宣言しないでください

CERT ENV30-C (L3): 特定の関数の戻り値で参照されるオブジェクトを変更しない

MISRA.STDLIB.CTYPE.RANGE.2012_AMD1  ctype.h で関数に渡される値はすべて unsigned char として表現できるか、または値 EOF でなければなりません

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

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

CERT ENV31-C (L3): 環境ポインターを無効にする可能性のある操作の後に環境ポインターに依存しない
CERT ENV32-C (L1): すべての exit ハンドラーは正常に戻る必要がある

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

CERT ENV33-C (L1): system() を呼び出さない

SV.CODE_INJECTION.SHELL_EXEC  シェル実行へのコマンドインジェクション

CERT ENV34-C (L3): 特定の関数が返すポインターを格納しない

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

CERT ERR30-C (L1): errno を設定することがわかっているライブラリ関数を呼び出す前に errno をゼロに設定し、その関数が失敗を示す値を返した後でのみ errno をチェックする

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

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

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

CERT ERR32-C (L3): errno の不定値に依存しない

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

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

CERT ERR33-C (L1): 標準ライブラリのエラーを検出し、処理する

NPD.CHECK.MUST  ポインタを明示的に NULL チェックした後に逆参照します

NPD.FUNC.MUST  NULL を返す可能性がある関数の戻り値が逆参照されます

SV.RVT.RETVAL_NOTTESTED  戻り値の無視

CERT ERR34-C (L2): 文字列を数値に変換する際にエラーを検出する

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

MISRA.STDLIB.ATOI  ライブラリ stdlib.h から 'atof'、'atoi' または 'atol' が使用されています

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

CERT EXP30-C (L2): 副作用の評価の順序に依存しない

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

PORTING.VAR.EFFECTS  ある使用法が副次的な影響を受ける式で変数が 2 回使用されています

CERT EXP32-C (L2): nonvolatile 参照を使用して volatile オブジェクトにアクセスしないでください

CERT.EXPR.VOLATILE.ADDR  非 volatile ポインタを通して volatile オブジェクトにアクセスしてはいけません

CERT.EXPR.VOLATILE.ADDR.PARAM  非 volatile ポインタを介して volatile オブジェクトを関数に渡さないでください

CERT.EXPR.VOLATILE.PTRPTR  非 volatile ポインタへの参照を volatile ポインタのポインタに割り当てないでください

CERT EXP33-C (L1): 初期化されていないメモリの読み込みを行わない

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  未初期化の変数

CERT EXP34-C (L1): null ポインターを逆参照しない

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 チェック前のポインタの逆参照は問題となる可能性があります

CERT EXP35-C (L2): 一時的な存続期間を持つオブジェクトを変更しない

CERT.EXPR.TEMP_OBJ.MOD  一時的な存続期間を持つオブジェクトを変更しない

CERT EXP36-C (L3): より厳密に整列されたポインター型にポインターをキャストしない

MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012   オブジェクト タイプを指すポインタと、異なるオブジェクト タイプを指す別のポインタとの間のキャスト

CERT EXP37-C (L3): 適切な数字と引数の型で関数を呼び出す

MISRA.FUNC.UNMATCHED.PARAMS  関数に渡される仮引数と実際のパラメーターの数が一致しません

CERT EXP39-C (L3): 互換性のない型のポインターを使用して変数にアクセスしない

MISRA.CAST.FUNC_PTR.2012   関数を指すポインタと、別の非互換タイプとの間で実行された変換

MISRA.CAST.INCOMPLETE_PTR_TO_ANY.2012   不完全なタイプ を指すポインタと、別のタイプとの間で実行された変換

MISRA.CAST.OBJ_PTR_TO_NON_INT.2012   オブジェクトを指すポインタと、非整数算術演算タイプとの間のキャスト

MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012   オブジェクト タイプを指すポインタと、異なるオブジェクト タイプを指す別のポインタとの間のキャスト

CERT EXP40-C (L3): 定数オブジェクトを変更しない
CERT EXP42-C (L1): パディングデータを比較しない

MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES  標準ライブラリ関数 memcmp へのポインター引数は、ポインター型、本質的に符号付きの型、本質的に符号なしの型、本質的にブール型、または本質的に列挙型のどれかです

CERT EXP43-C (L3): restrict で修飾されたポインターの使用時には未定義の動作を避ける

MISRA.TYPE.RESTRICT.QUAL.2012  restrict 型修飾子は使用しない

CERT EXP44-C (L3): sizeof、_Alignof、または _Generic のオペランドの副作用に頼らない

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

CERT EXP45-C (L2): 条件式で代入を実行しない

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

ASSIGCOND.GEN  割り当て条件

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

CERT EXP46-C (L2): ブール型のオペランドでビット演算子を使用しない

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

CERT EXP47-C (L2): 正しくない型の引数で va_arg を呼び出さない

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

CERT FIO30-C (L1): ユーザーからの入力を使って書式文字列を組み立てない

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

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

CERT FIO32-C (L3): ファイルのみに適した操作をデバイスに対して実行しない
CERT FIO34-C (L1): ファイルから読み込んだ文字と EOF または WEOF を区別する

CWARN.CMPCHR.EOF  'char' 式と EOF 定数との比較

CERT FIO37-C (L1): fgets() または fgetws() が正常に実行された場合に空でない文字列が返されることを想定していない

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

CERT FIO38-C (L3): 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 オブジェクト(関数の戻り値)へのポインターは逆参照してはなりません

CERT FIO39-C (L2): 中間のフラッシュまたは位置調整の関数呼び出しをせずに、ストリームから交互に入力と出力を行わない

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

CERT FIO40-C (L2): fgets() または fgetws() の失敗時には文字列をリセットする

CERT.FIO.RESET  fgets() または fgetws() の失敗時には文字列をリセットする

CERT FIO41-C (L3): 副作用のあるストリーム引数を使用して getc()、putc()、getwc()、または putwc() を呼び出さない
CERT FIO42-C (L3): 不要になったファイルを閉じる

RH.LEAK  リソースリーク

CERT FIO44-C (L3): fsetpos() に、fgetpos() から返される値のみを使用する

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

CERT FIO45-C (L2): ファイルへのアクセス中に TOCTOU の競合状態を回避する

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

CERT FIO46-C (L3): 閉じたファイルにアクセスしない

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

CERT 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 関数呼び出しの書式指定子が不明です

CERT FLP30-C (L2): 浮動小数点変数をループカウンターとして使用しない

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

CERT FLP32-C (L1): 数学関数のドメインエラーと範囲エラーを防止または検出する

CERT.MATH.DOMAIN.CHECK  標準ライブラリ数学関数に渡される 1 つ以上の引数が有効なドメイン外にあります

CERT.MATH.RANGE.CHECK  範囲エラーを発生させる可能性のあるライブラリ数学関数の呼び出し後にエラー条件をチェックする必要です

CERT FLP34-C (L3): 浮動小数点変換は新しい型の範囲に収まるようにする

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

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

MISRA.CAST.INT_FLOAT  浮動小数点タイプへの複合式のキャスト

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

CERT FLP36-C (L3): 整数値を浮動小数点型に変換する場合は精度を保持する

PORTING.CAST.FLTPNT  非浮動小数点タイプへの浮動小数点式のキャスト

CERT FLP37-C (L3): 浮動小数点値の比較にオブジェクト表現を使用しない

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

MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES  標準ライブラリ関数 memcmp へのポインター引数は、ポインター型、本質的に符号付きの型、本質的に符号なしの型、本質的にブール型、または本質的に列挙型のどれかです

CERT INT30-C (L2): 符号なし整数演算がラップしないことを確認する

CWARN.NOEFFECT.OUTOFRANGE  範囲外の値

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

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

CERT INT31-C (L1): 整数変換により、喪失データや誤解釈データにならないことを確認する

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

CERT INT32-C (L1): 符号付き整数に対する演算がオーバーフローを起こさないようにする

CWARN.NOEFFECT.OUTOFRANGE  範囲外の値

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

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

CERT INT33-C (L2): 除算および剰余演算により、ゼロ除算エラーが発生しないことを確認する

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

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

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

DBZ.GENERAL.FLOAT  浮動小数点数のゼロ除算が発生した可能性があります

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

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

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

CERT INT34-C (L3): 式を負のビット数分シフトさせたり、オペランドに存在するビット数以上にシフトさせたりしない

MISRA.SHIFT.RANGE.2012   シフト演算子の右側のオペランドは範囲外です - 左側のオペランドの基本タイプのサイズ以上か、または負

CERT INT35-C (L3): 正しい整数精度を使用する
CERT INT36-C (L3): ポインターから整数、または整数からポインターに変換する

MISRA.CAST.OBJ_PTR_TO_INT.2012   オブジェクトを指すポインタと、整数タイプとの間で実行された変換

CERT MEM30-C (L2): 解放されたメモリにアクセスしない

UFM.DEREF.MIGHT  解放済みメモリの逆参照の可能性

UFM.DEREF.MUST  解放済みメモリの逆参照

UFM.FFM.MIGHT  解放済みメモリの使用 (二重解放)の可能性

UFM.FFM.MUST  解放済みメモリの解放

UFM.RETURN.MIGHT  解放済みメモリの戻り値への使用の可能性

UFM.RETURN.MUST  解放済みメモリの戻り値への使用

UFM.USE.MIGHT  解放済みメモリの使用の可能性

UFM.USE.MUST  解放済みメモリの使用

CERT MEM31-C (L3): 動的に割り当てられたメモリが不要になったら解放する

CL.FFM.ASSIGN  解放済みメモリの使用 (二重解放) - operator= が無いため

CL.FFM.COPY  解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため

CL.SHALLOW.ASSIGN  解放済みメモリの使用 (二重解放) - 演算子 = での浅いコピー

CL.SHALLOW.COPY  解放済みメモリの使用 (二重解放) - コピーコンストラクタでの浅いコピー

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

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

CERT MEM33-C (L3): フレキシブル配列メンバーを含む構造体の割り当てとコピーは動的に行う

MISRA.INCOMPLETE.STRUCT  不完全な構造タイプが使用されています

MISRA.MEMB.FLEX_ARRAY.2012  柔軟な配列メンバーは宣言しないでください

CERT MEM34-C (L2): 動的に割り当てられたメモリのみを解放する

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

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

CERT MEM35-C (L2): オブジェクトに十分なメモリを割り当てる

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

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

CERT MEM36-C (L3): realloc() を呼び出してオブジェクトのアライメントを変更しない

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

CERT MSC30-C (L3): 疑似乱数の生成に rand() 関数を使用しない

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

CERT MSC32-C (L1): 疑似乱数ジェネレータを適切にシードする

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

CERT MSC33-C (L2): asctime() 関数に無効なデータを渡さない

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

CERT MSC37-C (L2): 制御が非 void 関数の終わりに到達しないことを確認する

FUNCRET.GEN  非 void 関数に戻り値がありません

FUNCRET.IMPLICIT  暗黙的に int を返す非 void 関数に戻り値がありません

CERT MSC38-C (L3): 定義済み識別子は、マクロとしてのみ実装されている可能性がある場合は、オブジェクトとして扱わない
CERT MSC39-C (L3): 不定値を持つ va_list に対して va_arg() を呼び出さない

VA.LIST.INDETERMINATE  不定値を持つ va_list に対する va_arg() の呼び出し

CERT MSC40-C (L3): 制約に違反しない

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

CERT MSC41-C (L2): 機密情報をハードコード化しない

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

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

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

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

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

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

CERT POS30-C (L1): readlink() 関数を適切に使用する

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

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

CERT POS34-C (L2): 自動変数へのポインターを引数として putenv() を呼び出さないでください

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

CERT POS35-C (L2): シンボリックリンクの有無を確認しながら競合状態を回避する

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

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

CERT POS36-C (L1): 権限放棄時に正しい廃止順序を守る

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

CERT POS37-C (L1): 権限が正常に放棄されたことを確認する

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

CERT POS38-C (L3): fork およびファイル記述子を使用する場合は競合状態に注意する
CERT POS39-C (L1): システム間でのデータ転送時は正しいバイトオーダーを使用する

BYTEORDER.HTON.SEND  ホストバイトオーダーからネットワークバイトオーダーの変換が欠落しています

BYTEORDER.HTON.WRITE  ホストバイトオーダーからネットワークバイトオーダーの変換が欠落しています

BYTEORDER.NTOH.READ  ネットワークバイトオーダーからホストバイトオーダーの変換が欠落しています

BYTEORDER.NTOH.RECV  ネットワークバイトオーダーからホストバイトオーダーの変換が欠落しています

CERT POS44-C (L3): シグナルを使用してスレッドを終了しない

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

CERT POS47-C (L3): 非同期キャンセルが可能なスレッドを使用してはいけません

CERT.POS.THREAD.ASYNC_CANCEL  非同期キャンセルが可能なスレッドを使用してはいけません

CERT POS48-C (L3): 他の POSIX スレッドのミューテックスをロック解除したり、破壊したりしない
CERT POS49-C (L3): 複数のスレッドからデータにアクセスする必要がある場合は、ミューテックスを提供し、隣接データもアクセスされないようにする
CERT POS50-C (L3): POSIX スレッド間で共有されるオブジェクトは適切な保持期間を指定して宣言する
CERT POS51-C (L3): 事前定義された順序でロックすることにより、POSIX スレッドのデッドロックを回避する

CONC.DL  デッドロック

CONC.NO_UNLOCK  変数のロック解除の欠落

CERT POS52-C (L3): POSIX ロックの保持中にブロックする可能性のある操作を実行しない

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

CERT POS53-C (L2): 条件変数に対する並行待機操作に複数のミューテックスを使用しない

CERT.CONC.COND_MULTIPLE_MUTEX  条件変数に対する並行待機操作に複数のミューテックスを使用しない

CERT POS54-C (L1): POSIX ライブラリエラーを検出して処理する

SV.RVT.RETVAL_NOTTESTED  戻り値の無視

CERT PRE30-C (L3): 連結によってユニバーサル文字名を作成しない

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

CERT PRE31-C (L2): 安全でないマクロへの引数で副作用を避ける

PORTING.VAR.EFFECTS  ある使用法が副次的な影響を受ける式で変数が 2 回使用されています

CERT PRE32-C (L3): 関数のようなマクロの呼び出しでプリプロセッサディレクティブを使用しない

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

CERT SIG30-C (L1): シグナルハンドラー内では非同期安全な関数のみを呼び出す

CERT.SIG.SIG_HANDLER.ASYNC_SAFE  シグナルハンドラー内では非同期セーフな関数のみを呼び出す

CERT SIG31-C (L1): シグナルハンドラー内で共有オブジェクトにアクセスしない

CERT.SIG.SIG_HANDLER.SHARED_OBJ  シグナルハンドラー内で共有オブジェクトにアクセスしないでください

CERT.SIG.SIG_HANDLER.SHARED_OBJ.HEAP  シグナルハンドラー内で共有オブジェクトにアクセスしないでください

CERT.SIG.SIG_HANDLER.SHARED_OBJ.MIGHT  シグナルハンドラー内で共有オブジェクトにアクセスしないでください

CERT SIG34-C (L3): 割り込みが可能なシグナルハンドラ内から signal() を呼び出さない

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

CERT SIG35-C (L3): 計算例外シグナルハンドラーから復帰しない

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

CERT STR30-C (L2): 文字列リテラルを変更しない

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

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

CERT STR31-C (L2): 文字列のストレージに文字データと null 終了文字を格納するためのスペースが十分にあることを保証する

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

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

CERT STR32-C (L1): 文字列を期待するライブラリ関数には null 以外で終了する文字のシーケンスは渡さない

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

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

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

CERT STR34-C (L2): 文字をより大きなサイズの整数に変換する前に、unsigned char 型にキャストする

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

CERT STR37-C (L3): 文字処理関数への引数は、unsigned char として表現できなければならない

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

MISRA.ETYPE.ASSIGN.2012   より狭い基本タイプ、または、異なる基本タイプカテゴリーのオブジェクトへの割り当て

CERT STR38-C (L1): ナロー文字の文字列/関数とワイド文字の文字列/関数を混同しない

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

CERT WIN30-C (L3): 割り当ておよび割り当て解除機能を適切に組み合わせる

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

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