このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
CERT C ルールと推奨事項
CERT C はソフトウェア開発者向けの一連のコード ガイドラインです。C 言語での安全なコーディングを中心としています。このガイドラインは、実行時に予期しない結果を招き、セキュリティの脆弱性が外部にさらされる可能性のある未定義の動作を含む構文を取り除くのに役立ちます。継続的に開発中の CERT C の Web サイトに、各種のルールと推奨事項が掲載されています。CERT C ルールと推奨事項に対する Polyspace の対応範囲を確認するには、Polyspace でのコーディング規約のサポートを参照してください。[SEI CERT-C をチェック] (-cert-c)
解析オプションを使用して、このルールと推奨事項のサブセットを有効にします。
Polyspace 結果
Rule 01.プリプロセッサ (PRE)
CERT C: Rule PRE30-C | 連結からユニバーサル文字名を作成しない |
CERT C: Rule PRE31-C | 安全でないマクロに対する引数の二次的影響を避ける |
CERT C: Rule PRE32-C | 関数形式のマクロの呼び出しでプリプロセッサ命令を使用しない |
Rule 02.宣言と初期化 (DCL)
CERT C: Rule DCL30-C | Declare objects with appropriate storage durations |
CERT C: Rule DCL31-C | Declare identifiers before using them |
CERT C: Rule DCL36-C | 競合するリンクの分類をもつ識別子を宣言しない |
CERT C: Rule DCL37-C | 予約済みの識別子を宣言または定義しない |
CERT C: Rule DCL38-C | フレキシブル配列メンバーの宣言時に正しい構文を使用する |
CERT C: Rule DCL39-C | Avoid information leakage in structure padding |
CERT C: Rule DCL40-C | Do not create incompatible declarations of the same function or object |
CERT C: Rule DCL41-C | switch ステートメント内の最初の case ラベルの前で変数を宣言しない |
Rule 03.式 (EXP)
CERT C: Rule EXP30-C | 二次的影響に関して評価の順序に依存しない |
CERT C: Rule EXP32-C | Do not access a volatile object through a nonvolatile reference |
CERT C: Rule EXP33-C | Do not read uninitialized memory |
CERT C: Rule EXP34-C | Do not dereference null pointers |
CERT C: Rule EXP35-C | 有効期間が一時的なオブジェクトを変更しない |
CERT C: Rule EXP36-C | Do not cast pointers into more strictly aligned pointer types |
CERT C: Rule EXP37-C | Call functions with the correct number and type of arguments |
CERT C: Rule EXP39-C | Do not access a variable through a pointer of an incompatible type |
CERT C: Rule EXP40-C | Do not modify constant objects |
CERT C: Rule EXP42-C | パディング データを比較しない |
CERT C: Rule EXP43-C | Avoid undefined behavior when using restrict-qualified pointers |
CERT C: Rule EXP44-C | sizeof、_Alignof、または _Generic のオペランドの二次的影響に依存しない |
CERT C: Rule EXP45-C | Do not perform assignments in selection statements |
CERT C: Rule EXP46-C | boolean 形式のオペランドと一緒にビット演算子を使用しない |
CERT C: Rule EXP47-C | 無効な型の引数を使用して va_arg を呼び出さない |
Rule 04.整数 (INT)
CERT C: Rule INT30-C | Ensure that unsigned integer operations do not wrap |
CERT C: Rule INT31-C | Ensure that integer conversions do not result in lost or misinterpreted data |
CERT C: Rule INT32-C | Ensure that operations on signed integers do not result in overflow |
CERT C: Rule INT33-C | Ensure that division and remainder operations do not result in divide-by-zero errors |
CERT C: Rule INT34-C | Do not shift an expression by a negative number of bits or by greater than or equal to the number of bits that exist in the operand |
CERT C: Rule INT35-C | Use correct integer precisions |
CERT C: Rule INT36-C | Converting a pointer to integer or integer to pointer |
Rule 05.浮動小数点 (FLP)
CERT C: Rule FLP30-C | 浮動小数点変数をループ カウンターとして使用しない |
CERT C: Rule FLP32-C | Prevent or detect domain and range errors in math functions |
CERT C: Rule FLP34-C | Ensure that floating-point conversions are within range of the new type |
CERT C: Rule FLP36-C | Preserve precision when converting integral values to floating-point type |
CERT C: Rule FLP37-C | 浮動小数点値の比較にオブジェクト表現を使用しない |
Rule 06.配列 (ARR)
CERT C: Rule ARR30-C | Do not form or use out-of-bounds pointers or array subscripts |
CERT C: Rule ARR32-C | Ensure size arguments for variable length arrays are in a valid range |
CERT C: Rule ARR36-C | 同じ配列を参照しない 2 つのポインターを減算したり比較したりしない |
CERT C: Rule ARR37-C | Do not add or subtract an integer to a pointer to a non-array object |
CERT C: Rule ARR38-C | Guarantee that library functions do not form invalid pointers |
CERT C: Rule ARR39-C | Do not add or subtract a scaled integer to a pointer |
Rule 07.文字と文字列 (STR)
CERT C: Rule STR30-C | Do not attempt to modify string literals |
CERT C: Rule STR31-C | Guarantee that storage for strings has sufficient space for character data and the null terminator |
CERT C: Rule STR32-C | Do not pass a non-null-terminated character sequence to a library function that expects a string |
CERT C: Rule STR34-C | Cast characters to unsigned char before converting to larger integer sizes |
CERT C: Rule STR37-C | 文字処理関数の引数は符号なし char で表現できなければならない |
CERT C: Rule STR38-C | ナロー文字列およびワイド文字列と関数を混同しない |
Rule 08.メモリ管理 (MEM)
CERT C: Rule MEM30-C | Do not access freed memory |
CERT C: Rule MEM31-C | Free dynamically allocated memory when no longer needed |
CERT C: Rule MEM33-C | フレキシブル配列メンバーを含む構造体を動的に割り当ておよびコピーする |
CERT C: Rule MEM34-C | Only free memory allocated dynamically |
CERT C: Rule MEM35-C | Allocate sufficient memory for an object |
CERT C: Rule MEM36-C | realloc() を呼び出してオブジェクトのアライメントを変更しない |
Rule 09.入出力 (FIO)
CERT C: Rule FIO30-C | Exclude user input from format strings |
CERT C: Rule FIO32-C | Do not perform operations on devices that are only appropriate for files |
CERT C: Rule FIO34-C | Distinguish between characters read from a file and EOF or WEOF |
CERT C: Rule FIO37-C | Do not assume that fgets() or fgetws() returns a nonempty string when successful |
CERT C: Rule FIO38-C | FILE オブジェクトをコピーしない |
CERT C: Rule FIO39-C | フラッシュまたは位置付け呼び出しの介在なしでのストリームからの入出力を交互実行しない |
CERT C: Rule FIO40-C | fgets() または fgetws() 失敗時に文字列をリセットする |
CERT C: Rule FIO41-C | 二次的影響があるストリーム引数を使用して getc()、putc()、getwc()、putwc() を呼び出さない |
CERT C: Rule FIO42-C | Close files when they are no longer needed |
CERT C: Rule FIO44-C | fgetpos() から返された fsetpos() の値のみを使用する |
CERT C: Rule FIO45-C | Avoid TOCTOU race conditions while accessing files |
CERT C: Rule FIO46-C | Do not access a closed file |
CERT C: Rule FIO47-C | Use valid format strings |
Rule 10.環境 (ENV)
CERT C: Rule ENV30-C | Do not modify the object referenced by the return value of certain functions |
CERT C: Rule ENV31-C | 環境ポインターを無効にする可能性のある操作の後にその環境ポインターに依存しない |
CERT C: Rule ENV32-C | すべての終了ハンドラーは正常に戻らなければならない |
CERT C: Rule ENV33-C | Do not call system() |
CERT C: Rule ENV34-C | Do not store pointers returned by certain functions |
Rule 11.信号 (SIG)
CERT C: Rule SIG30-C | 信号ハンドラー内から非同期安全な関数のみを呼び出す |
CERT C: Rule SIG31-C | 信号ハンドラー内の共有オブジェクトにアクセスしない |
CERT C: Rule SIG34-C | 中断可能な信号ハンドラー内から signal() を呼び出さない |
CERT C: Rule SIG35-C | 計算例外の信号ハンドラーから値を返さない |
Rule 12.エラーの取り扱い (ERR)
CERT C: Rule ERR30-C | Set errno to zero before calling a library function known to set errno, and check errno only after the function returns a value indicating failure |
CERT C: Rule ERR32-C | errno の不確定の値に依存しない |
CERT C: Rule ERR33-C | 標準ライブラリのエラーを検出および処理する |
CERT C: Rule ERR34-C | 文字列を数値に変換する際にエラーを検出する |
Rule 14.同時実行 (CON)
CERT C: Rule CON30-C | Clean up thread-specific storage |
CERT C: Rule CON31-C | ロック中はミューテックスを破棄しない |
CERT C: Rule CON32-C | 複数のスレッドからビット フィールドにアクセス中のデータ レースを回避する |
CERT C: Rule CON33-C | Avoid race conditions when using library functions |
CERT C: Rule CON34-C | Declare objects shared between threads with appropriate storage durations |
CERT C:Rule CON35-C | Avoid deadlock by locking in a predefined order |
CERT C: Rule CON36-C | Wrap functions that can spuriously wake up in a loop |
CERT C: Rule CON37-C | Do not call signal() in a multithreaded program |
CERT C: Rule CON38-C | 条件変数の使用時にスレッドの安全性と存続性を維持する |
CERT C:Rule CON39-C | 以前に結合または分離されたスレッドを結合したり分離したりしない |
CERT C: Rule CON40-C | Do not refer to an atomic variable twice in an expression |
CERT C: Rule CON41-C | Wrap functions that can fail spuriously in a loop |
CERT C: Rule CON43-C | Do not allow data races in multithreaded code |
Rule 48.その他 (MSC)
CERT C: Rule MSC30-C | Do not use the rand() function for generating pseudorandom numbers |
CERT C: Rule MSC32-C | Properly seed pseudorandom number generators |
CERT C: Rule MSC33-C | Do not pass invalid data to the asctime() function |
CERT C: Rule MSC37-C | Ensure that control never reaches the end of a non-void function |
CERT C: Rule MSC38-C | マクロとして実装されている可能性のある定義済みの識別子をオブジェクトとして扱わない |
CERT C: Rule MSC39-C | Do not call va_arg() on a va_list that has an indeterminate value |
CERT C: Rule MSC40-C | 制約に違反しない |
CERT C:Rule MSC41-C | Never hard code sensitive information |
Rule 50.POSIX (POS)
CERT C: Rule POS30-C | Use the readlink() function properly |
CERT C:Rule POS34-C | 引数として自動変数を指すポインターを使用して putenv() を呼び出さない |
CERT C: Rule POS35-C | Avoid race conditions while checking for the existence of a symbolic link |
CERT C: Rule POS36-C | 権限を放棄する場合は正しい取り消し順序に従う |
CERT C: Rule POS37-C | 権限の放棄が必ず正常に行われるようにする |
CERT C: Rule POS38-C | フォークとファイル記述子を使用する際に競合状態に注意する |
CERT C: Rule POS39-C | システム間でデータを転送する際に正しいバイト順を使用する |
CERT C: Rule POS44-C | Do not use signals to terminate threads |
CERT C: Rule POS47-C | 非同期でキャンセル可能なスレッドを使用しない |
CERT C:Rule POS48-C | 別の POSIX スレッドのミューテックスをロック解除または破棄しない |
CERT C: Rule POS49-C | When data must be accessed by multiple threads, provide a mutex and guarantee no adjacent data is also accessed |
CERT C: Rule POS50-C | Declare objects shared between POSIX threads with appropriate storage durations |
CERT C:Rule POS51-C | Avoid deadlock with POSIX threads by locking in predefined order |
CERT C: Rule POS52-C | Do not perform operations that can block while holding a POSIX lock |
CERT C: Rule POS53-C | 条件変数の同時待機操作に複数のミューテックスを使用しない |
CERT C: Rule POS54-C | POSIX ライブラリのエラーを検出および処理する |
Rule 51.Microsoft Windows (WIN)
CERT C: Rule WIN30-C | 割り当て関数と割り当て解除関数を適切にペアにする |
Rec.01.プリプロセッサ (PRE)
CERT C: Rec.PRE00-C | 関数形式のマクロよりインライン関数または静的関数を選ぶ |
CERT C: Rec.PRE01-C | マクロ内ではパラメーター名を囲むかっこを使用する |
CERT C: Rec.PRE03-C | Prefer typedefs to defines for encoding non-pointer type (R2024a 以降) |
CERT C:Rec.PRE04-C | Do not reuse a standard header file name (R2025a 以降) |
CERT C:Rec.PRE05-C | Understand macro replacement when concatenating tokens or performing stringification (R2024b 以降) |
CERT C:Rec.PRE06-C | ヘッダー ファイルをインクルード ガード内に囲む |
CERT C: Rec.PRE07-C | 疑問符を繰り返し使用することを避ける |
CERT C: Rec.PRE08-C | Guarantee that header file names are unique (R2024a 以降) |
CERT C: Rec.PRE09-C | セキュリティ保護された関数を非推奨または使用されなくなった関数と置き換えない |
CERT C:Rec.PRE10-C | マルチステートメント マクロを do-while ループでラップする |
CERT C:Rec.PRE11-C | マクロ定義をセミコロンで終了しない |
CERT C: Rec.PRE12-C | Do not define unsafe macros (R2024a 以降) |
Rec.02.宣言と初期化 (DCL)
CERT C: Rec.DCL00-C | Const-qualify immutable objects |
CERT C: Rec.DCL01-C | Do not reuse variable names in subscopes |
CERT C: Rec.DCL02-C | 視覚的に区別できる識別子を使用する |
CERT C: Rec.DCL06-C | Use meaningful symbolic constants to represent literal values |
CERT C: Rec.DCL07-C | 適切な型情報を関数宣言子に含める |
CERT C: Rec.DCL10-C | 可変個引数関数のライターと呼び出し元の間のコントラクトを維持する |
CERT C: Rec.DCL11-C | Understand the type issues associated with variadic functions |
CERT C: Rec.DCL12-C | 抽象データ型は不透明な型を使用して実装する |
CERT C: Rec.DCL13-C | 当該関数によって変更されない値へのポインターである関数パラメーターは const として宣言する |
CERT C: Rec.DCL15-C | 外部リンクを必要としないファイル スコープ オブジェクトまたは関数は static として宣言する |
CERT C: Rec.DCL16-C | 'l' ではなく 'L' を使用して long 値を示す |
CERT C: Rec.DCL18-C | 10 進数値を指定する際に整数定数を 0 では始めない |
CERT C: Rec.DCL19-C | 変数と関数のスコープは最小化する |
CERT C:Rec.DCL21-C | Understand the storage of compound literals (R2024b 以降) |
CERT C:Rec.DCL22-C | Use volatile for data that cannot be cached |
CERT C: Rec.DCL23-C | 相互に可視の識別子は一意になることを保証する |
Rec.03.式 (EXP)
CERT C: Rec.EXP00-C | Use parentheses for precedence of operation |
CERT C:Rec.EXP03-C | Do not assume the size of a structure is the sum of the sizes of its members (R2025a 以降) |
CERT C:Rec.EXP05-C | Do not cast away a const qualification |
CERT C:Rec.EXP07-C | Do not diminish the benefits of constants by assuming their values in expressions (R2024a 以降) |
CERT C:Rec.EXP08-C | Ensure pointer arithmetic is used correctly |
CERT C: Rec.EXP09-C | 型または変数のサイズを判別する場合は sizeof を使用する |
CERT C: Rec.EXP10-C | 部分式の評価の順序または二次的影響が発生する順序には依存しない |
CERT C:Rec.EXP11-C | Do not make assumptions regarding the layout of structures with bit-fields (R2024b 以降) |
CERT C:Rec.EXP12-C | 関数から返された値を無視しない |
CERT C: Rec.EXP13-C | Treat relational and equality operators as if they were nonassociative |
CERT C: Rec.EXP15-C | if、for、または while ステートメントと同じ行にセミコロンを配置しない |
CERT C:Rec.EXP19-C | if、for または while ステートメントの本体では中かっこを使用する |
Rec.04.整数 (INT)
CERT C: Rec.INT00-C | Understand the data model used by your implementation(s) |
CERT C: Rec.INT02-C | Understand integer conversion rules |
CERT C: Rec.INT04-C | Enforce limits on integer values originating from tainted sources |
CERT C: Rec.INT07-C | 数値の場合は符号付きまたは符号なしの char 型のみを明示的に使用する |
CERT C: Rec.INT08-C | Verify that all integer values are in range |
CERT C: Rec.INT09-C | 列挙定数は必ず一意値にマッピングされるようにする |
CERT C: Rec.INT10-C | Do not assume a positive remainder when using the % operator |
CERT C: Rec.INT12-C | 式で使用する場合にプレーンな int ビットフィールドの型について仮定を行わない |
CERT C: Rec.INT13-C | Use bitwise operators only on unsigned operands |
CERT C: Rec.INT14-C | 同じデータに対してビット演算と算術演算の実行を避ける |
CERT C: Rec.INT18-C | Evaluate integer expressions in a larger size before comparing or assigning to that size |
Rec.05.浮動小数点 (FLP)
CERT C: Rec.FLP00-C | 浮動小数点数の制限事項を理解する |
CERT C: Rec.FLP02-C | 精度の高い計算が必要な場合は浮動小数点数の使用を避ける |
CERT C: Rec.FLP03-C | Detect and handle floating-point errors |
CERT C: Rec.FLP06-C | Convert integers to floating point for floating-point operations |
Rec.06.配列 (ARR)
CERT C: Rec.ARR01-C | Do not apply the sizeof operator to a pointer when taking the size of an array |
CERT C: Rec.ARR02-C | Explicitly specify array bounds, even if implicitly defined by an initializer |
Rec.07.文字と文字列 (STR)
CERT C: Rec.STR02-C | Sanitize data passed to complex subsystems |
CERT C: Rec.STR03-C | Do not inadvertently truncate a string |
CERT C:Rec.STR06-C | Do not assume that strtok() leaves the parse string unchanged (R2025a 以降) |
CERT C:Rec.STR07-C | 文字列操作での範囲チェック インターフェイスの使用 |
CERT C: Rec.STR11-C | Do not specify the bound of a character array initialized with a string literal |
Rec.08.メモリ管理 (MEM)
CERT C: Rec.MEM00-C | Allocate and free memory in the same module, at the same level of abstraction |
CERT C: Rec.MEM01-C | free() の直後にポインターに新しい値を保存する |
CERT C: Rec.MEM02-C | Immediately cast the result of a memory allocation function call into a pointer to the allocated type |
CERT C: Rec.MEM03-C | Clear sensitive information stored in reusable resources |
CERT C: Rec.MEM04-C | Beware of zero-length allocations |
CERT C: Rec.MEM05-C | Avoid large stack allocations |
CERT C: Rec.MEM06-C | Ensure that sensitive data is not written out to disk |
CERT C: Rec.MEM11-C | Do not assume infinite heap space |
CERT C: Rec.MEM12-C | リソースの使用時や解放時にエラーが発生して関数を出る場合は、goto 連鎖の使用を検討する |
Rec.09.入出力 (FIO)
CERT C: Rec.FIO02-C | Canonicalize path names originating from tainted sources |
CERT C:Rec.FIO03-C | Do not make assumptions about fopen() and file creation (R2024a 以降) |
CERT C:Rec.FIO06-C | Create files with appropriate access permissions (R2024b 以降) |
CERT C:Rec.FIO08-C | Take care when calling remove() on an open file (R2024b 以降) |
CERT C:Rec.FIO10-C | Take care when using the rename() function (R2024b 以降) |
CERT C:Rec.FIO11-C | Take care when specifying the mode parameter of fopen() |
CERT C: Rec.FIO21-C | Do not create temporary files in shared directories |
CERT C: Rec.FIO24-C | 既に開いているファイルを開かない |
Rec.10.環境 (ENV)
CERT C: Rec.ENV01-C | Do not make assumptions about the size of an environment variable |
Rec.12.エラーの取り扱い (ERR)
CERT C: Rec.ERR00-C | 一貫性のある包括的なエラーの取り扱いポリシーを採用および実装する |
Rec.13.Application Programming Interfaces (API)
CERT C: Rec.API04-C | Provide a consistent and usable error-checking mechanism |
Rec.14.同時実行 (CON)
CERT C: Rec.CON01-C | Acquire and release synchronization primitives in the same module, at the same level of abstraction |
CERT C: Rec.CON05-C | Do not perform operations that can block while holding a lock |
Rec.48.その他 (MSC)
CERT C: Rec.MSC01-C | Strive for logical completeness |
CERT C: Rec.MSC04-C | コメントは一貫性のある読みやすい方法で使用する |
CERT C: Rec.MSC12-C | Detect and remove code that has no effect or is never executed |
CERT C: Rec.MSC13-C | Detect and remove unused values |
CERT C: Rec.MSC15-C | Do not depend on undefined behavior. |
CERT C: Rec.MSC17-C | case ラベルに関連付けるステートメントのすべてのセットを break ステートメントで終了する |
CERT C: Rec.MSC18-C | Be careful while handling sensitive data, such as passwords, in program code |
CERT C: Rec.MSC20-C | switch ステートメントを使用して複雑なブロックに制御を移行しない |
CERT C: Rec.MSC21-C | Use robust loop termination conditions |
CERT C: Rec.MSC22-C | Use the setjmp(), longjmp() facility securely |
CERT C: Rec.MSC24-C | Do not use deprecated or obsolescent functions |
Rec.50.POSIX (POS)
CERT C: Rec.POS05-C | Limit access to files by creating a jail |
Rec.51.Microsoft Windows (WIN)
CERT C: Rec.WIN00-C | Be specific when dynamically loading libraries |
トピック
- Polyspace でのコーディング規約のサポート
Polyspace でのさまざまなコーディング規約のサポートをチェックする。
- コーディング規約違反のチェックおよびレビュー
Polyspace Bug Finder で AUTOSAR C++14、CERT® C、CERT C++、CWE、MISRA C™、MISRA® C++、JSF AV C++、または ISO-17961 規格の違反をチェックする。
- PolyspaceBug Finder でサポートされている CERT C の必要ルールおよび静的に強制可能なルール
Polyspace でサポートされている CERT C ルールのリスト。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)