CERT C rules and recommendations
The following tables map CERT C rules and recommendations to Klocwork C checkers.
CERT C rules
| Rule | Checker name and description |
|---|---|
| ARR30-C(L2) |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.NON_ARRAY Non-array object is used as an array ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String NPD.FUNC.CALL.MIGHT Result of function that may return NULL may be passed to another function that may dereference it SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition |
| ARR32-C(L3) |
MISRA.ARRAY.VAR_LENGTH.2012 Variable-length array types shall not be used |
| ARR36-C(L3) |
MISRA.PTR.ARITH Pointer is used in arithmetic or array index expression |
| ARR37-C(L2) |
CERT.ARR.PTR.ARITH Pointer is used in arithmetic expression |
| ARR38-C(L2) |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds |
| ARR39-C(L2) |
CERT.ARR.PTR.ARITH Pointer is used in arithmetic expression |
| CERT ARR30-C (L2): Do not form or use out-of-bounds pointers or array subscripts |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.NON_ARRAY Non-array object is used as an array ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String NPD.FUNC.CALL.MIGHT Result of function that may return NULL may be passed to another function that may dereference it SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition |
| CERT ARR32-C (L3): Ensure size arguments for variable length arrays are in a valid range |
MISRA.ARRAY.VAR_LENGTH.2012 Variable-length array types shall not be used |
| CERT ARR36-C (L3): Do not subtract or compare two pointers that do not refer to the same array |
MISRA.PTR.ARITH Pointer is used in arithmetic or array index expression |
| CERT ARR37-C (L2): Do not add or subtract an integer to a pointer to a non-array object |
CERT.ARR.PTR.ARITH Pointer is used in arithmetic expression |
| CERT ARR38-C (L2): Guarantee that library functions do not form invalid pointers |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds |
| CERT ARR39-C (L2): Do not add or subtract a scaled integer to a pointer |
CERT.ARR.PTR.ARITH Pointer is used in arithmetic expression |
| CERT CON33-C (L3): Avoid race conditions when using library functions |
CERT.CONC.LIB_FUNC_USE Avoid race conditions when using library functions |
| CERT CON35-C (L3): Avoid deadlock by locking in a predefined order |
CONC.DL Deadlock CONC.NO_UNLOCK Missing unlock for variable |
| CERT CON36-C (L3): Wrap functions that can spuriously wake up in a loop |
CERT.CONC.WAKE_IN_LOOP_C Wrap functions that can spuriously wake up in a loop |
| CERT CON37-C (L3): Do not call signal() in a multithreaded program |
MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| CERT CON38-C (L3): Preserve thread safety and liveness when using condition variables |
CERT.CONC.UNSAFE_COND_VAR_C Preserve thread safety and liveness when using condition variables |
| CERT CON40-C (L2): Do not refer to an atomic variable twice in an expression |
CERT.CONC.ATOMIC_TWICE_EXPR Do not refer to an atomic variable twice in an expression |
| CERT CON41-C (L3): Wrap functions that can fail spuriously in a loop |
CERT.CONC.ATOMIC_COMP_FAIL_IN_LOOP Wrap functions that can spuriously fail up in a loop |
| CERT DCL30-C (L2): Declare objects with appropriate storage durations |
LOCRET.ARG Function returns address of local variable LOCRET.GLOB Function returns address of local variable LOCRET.RET Function returns address of local variable |
| CERT DCL31-C (L3): Declare identifiers before using them |
CWARN.IMPLICITINT Anachronistic 'implicit int' MISRA.DECL.NO_TYPE Declaration without a type MISRA.FUNC.NOPROT.CALL Function is called but has no prototype RETVOID.IMPLICIT Implicitly int function returns void value |
| CERT DCL36-C (L2): Do not declare an identifier with conflicting linkage classifications |
MISRA.FUNC.STATIC.REDECL Function or object redeclaration does not include 'static' modifier |
| CERT DCL37-C (L3): Do not declare or define a reserved identifier |
MISRA.DEFINE.WRONGNAME.UNDERSCORE Usage of a reserved name for naming a macro MISRA.STDLIB.WRONGNAME Reused name of standard library macro, object or function MISRA.STDLIB.WRONGNAME.UNDERSCORE Usage of a reserved name for naming a language entity |
| CERT DCL38-C (L3): Use the correct syntax when declaring a flexible array member |
CERT.STRUCT.FLEXIBLE_ARRAY_MEMBER Use the correct syntax when declaring a flexible array member |
| CERT DCL39-C (L3): Avoid information leakage when passing a structure across a trust boundary |
PORTING.STORAGE.STRUCT Byte position of elements in a structure could depend on alignment and packing attributes. |
| CERT DCL40-C (L3): Do not create incompatible declarations of the same function or object |
MISRA.FUNC.NOPROT.DEF.2012 Function has a definition but no prototype MISRA.FUNC.PARAMS.IDENT Identifiers used in declaration and definition of function are not identical |
| CERT DCL41-C (L2): Do not declare variables inside a switch statement before the first case label |
CERT.DCL.SWITCH.VAR_BEFORE_CASE Do not declare variables inside a switch statement before the first case label |
| CERT ENV30-C (L3): Do not modify the object referenced by the return value of certain functions |
MISRA.STDLIB.CTYPE.RANGE.2012_AMD1 Any value passed to a function in ctype.h shall be representable as an unsigned char or be the value EOF MISRA.STDLIB.ILLEGAL_REUSE.2012_AMD1 The pointer returned by the Standard Library functions asctime and similar shall not be used following a subsequent call to the same function MISRA.STDLIB.ILLEGAL_WRITE.2012_AMD1 The pointers returned by the Standard Library functions localeconv, getenv, setlocale or, strerror shall only be used as if they have pointer to const-qualified type |
| CERT ENV32-C (L1): All exit handlers must return normally |
CERT.EXIT.HANDLER_TERMINATE All exit handlers must return normally |
| CERT ENV33-C (L1): Do not call system() |
SV.CODE_INJECTION.SHELL_EXEC Command Injection into Shell Execution |
| CERT ENV34-C (L3): Do not store pointers returned by certain functions |
MISRA.STDLIB.ILLEGAL_REUSE.2012_AMD1 The pointer returned by the Standard Library functions asctime and similar shall not be used following a subsequent call to the same function |
| CERT ERR30-C (L1): Set errno to zero before calling a library function known to set errno |
CXX.ERRNO.INCORRECTLY_CHECKED Errno condition check not required after calling library function CXX.ERRNO.NOT_CHECKED Errno condition check is missing after calling library function CXX.ERRNO.NOT_SET Errno is not reset to zero before calling library function |
| CERT ERR32-C (L3): Do not rely on indeterminate values of errno |
MISRA.INCL.SIGNAL.2012 The standard header file signal.h shall not be used MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| CERT ERR33-C (L1): Detect and handle standard library errors |
NPD.CHECK.MUST Pointer will be dereferenced after it was positively checked for NULL NPD.FUNC.MUST Result of function that may return NULL will be dereferenced SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| CERT ERR34-C (L2): Detect errors when converting a string to a number |
CERT.ERR.CONV.STR_TO_NUM Detect errors when converting a string to a number MISRA.STDLIB.ATOI Use of 'atof', 'atoi' or 'atol' from library stdlib.h SV.BANNED.RECOMMENDED.SCANF Banned recommended API: unsafe scanf-type functions |
| CERT EXP30-C (L2): Do not depend on the order of evaluation for side effects |
MISRA.INCR_DECR.OTHER Increment or decrement operator is mixed with other operators in expression PORTING.VAR.EFFECTS Variable used twice in one expression where one usage is subject to side-effects |
| CERT EXP32-C (L2): Do not access a volatile object through a nonvolatile reference |
CERT.EXPR.VOLATILE.ADDR Do not access a volatile object through a nonvolatile pointer CERT.EXPR.VOLATILE.ADDR.PARAM Do not pass a volatile object to a function through a nonvolatile pointer CERT.EXPR.VOLATILE.PTRPTR Do not assign a reference to a non-volatile pointer to a volatile pointer-to-pointer |
| CERT EXP33-C (L1): Do not read uninitialized memory |
UNINIT.HEAP.MIGHT Uninitialized Heap Use - possible UNINIT.HEAP.MUST Uninitialized Heap Use UNINIT.STACK.ARRAY.MIGHT Uninitialized Array - possible UNINIT.STACK.ARRAY.MUST Uninitialized Array UNINIT.STACK.ARRAY.PARTIAL.MUST Partially Uninitialized Array UNINIT.STACK.MIGHT Uninitialized Variable - possible UNINIT.STACK.MUST Uninitialized Variable |
| CERT EXP34-C (L1): Do not dereference null pointers |
NPD.CHECK.CALL.MIGHT Pointer may be passed to function that can dereference it after it was positively checked for NULL NPD.CHECK.CALL.MUST Pointer will be passed to function that may dereference it after it was positively checked for NULL NPD.CHECK.MIGHT Pointer may be dereferenced after it was positively checked for NULL NPD.CHECK.MUST Pointer will be dereferenced after it was positively checked for NULL NPD.CONST.CALL NULL is passed to function that can dereference it NPD.CONST.DEREF NULL is dereferenced NPD.FUNC.CALL.MIGHT Result of function that may return NULL may be passed to another function that may dereference it NPD.FUNC.CALL.MUST Result of function that may return NULL will be passed to another function that may dereference it NPD.FUNC.MIGHT Result of function that can return NULL may be dereferenced NPD.FUNC.MUST Result of function that may return NULL will be dereferenced NPD.GEN.CALL.MIGHT Null pointer may be passed to function that may dereference it NPD.GEN.CALL.MUST Null pointer will be passed to function that may dereference it NPD.GEN.MIGHT Null pointer may be dereferenced NPD.GEN.MUST Null pointer will be dereferenced RNPD.CALL Suspicious dereference of pointer in function call before NULL check RNPD.DEREF Suspicious dereference of pointer before NULL check |
| CERT EXP36-C (L3): Do not cast pointers into more strictly aligned pointer types |
MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012 Cast between a pointer to object type and a pointer to a different object type |
| CERT EXP37-C (L3): Call functions with the correct number and type of arguments |
MISRA.FUNC.UNMATCHED.PARAMS Number of formal and actual parameters passed to function do not match |
| CERT EXP39-C (L3): Do not access a variable through a pointer of an incompatible type |
MISRA.CAST.FUNC_PTR.2012 Conversion performed between a pointer to a function and another incompatible type MISRA.CAST.INCOMPLETE_PTR_TO_ANY.2012 Conversion performed between a pointer to an incomplete type and a different type MISRA.CAST.OBJ_PTR_TO_NON_INT.2012 A cast between a pointer to object and a non-integer arithmetic type MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012 Cast between a pointer to object type and a pointer to a different object type |
| CERT EXP42-C (L1): Do not compare padding data |
MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES The pointer arguments to the Standard Library function memcmp shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type |
| CERT EXP43-C (L3): Avoid undefined behavior when using restrict-qualified pointers |
MISRA.TYPE.RESTRICT.QUAL.2012 The restrict type qualifier shall not be used |
| CERT EXP44-C (L3): Do not rely on side effects in operands to sizeof |
MISRA.SIZEOF.SIDE_EFFECT Operand of sizeof has side effects |
| CERT EXP45-C (L2): Do not perform assignments in selection statements |
ASSIGCOND.CALL Assignment in condition (call) ASSIGCOND.GEN Assignment in condition MISRA.ASSIGN.COND Assignment operator is used in a condition |
| CERT EXP46-C (L2): Do not use a bitwise operator with a Boolean-like operand |
MISRA.LOGIC.OPERATOR.NOT_BOOL Operand of non-logical operator is effectively boolean |
| CERT EXP47-C (L2): Do not call va_arg with an argument of the incorrect type |
CERT.VA_ARG.TYPE Do not call va_arg with an argument of the incorrect type |
| CERT FIO30-C (L1): Exclude user input from format strings |
SV.FMTSTR.GENERIC Format String Vulnerability SV.TAINTED.FMTSTR Use of Unvalidated Data in a Format String |
| CERT FIO34-C (L1): Distinguish between characters read from a file and EOF or WEOF |
CWARN.CMPCHR.EOF A 'char' expression compared with EOF constant |
| CERT FIO37-C (L1): Do not assume that fgets() or fgetws() returns a nonempty string when successful |
CERT.FIO.FGETS Do not assume that fgets() or fgetws() returns a nonempty string when successful |
| CERT FIO38-C (L3): Do not copy a FILE object |
MISRA.FILE_PTR.DEREF.2012 A pointer to a FILE object shall not be dereferenced MISRA.FILE_PTR.DEREF.CAST.2012 Object is casted to a FILE pointer, and it shall not be dereferenced MISRA.FILE_PTR.DEREF.INDIRECT.2012 A pointer to a FILE object shall not be indirectly dereferenced by a system function MISRA.FILE_PTR.DEREF.RETURN.2012 A pointer to a FILE object (returned by function) shall not be dereferenced |
| CERT FIO39-C (L2): Do not alternately input and output from a stream without an intervening flush or positioning call |
CERT.FIO.NO_FLUSH Flush or positioning function call missing |
| CERT FIO42-C (L3): Close files when they are no longer needed |
RH.LEAK Resource leak |
| CERT FIO44-C (L3): Only use values for fsetpos() that are returned from fgetpos() |
CERT.FSETPOS.VALUE Only use values for fsetpos() that are returned from fgetpos() |
| CERT FIO45-C (L2): Avoid TOCTOU race conditions while accessing files |
SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| CERT FIO46-C (L3): Do not access a closed file |
SV.INCORRECT_RESOURCE_HANDLING.URH Insecure Resource Handling |
| CERT FIO47-C (L2): Use valid format strings |
SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD Incompatible type of a print function parameter SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED Unexpected type of a print function parameter SV.FMT_STR.PRINT_IMPROP_LENGTH Improper use of length modifier in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD Incompatible type of a scan function parameter SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED Unexpected type of a scan function parameter SV.FMT_STR.SCAN_IMPROP_LENGTH Improper use of length modifier in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW Too few arguments in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY Too many arguments in a scan function call SV.FMT_STR.UNKWN_FORMAT Unknown format specifier in a print function call |
| CERT FLP30-C (L2): Do not use floating-point variables as loop counters |
MISRA.FOR.COUNTER.FLT For loop counter has a floating point type |
| CERT FLP32-C (L1): Prevent or detect domain and range errors in math functions |
CERT.MATH.DOMAIN.CHECK One or more arguments passed to a standard library math function are outside its valid domain CERT.MATH.RANGE.CHECK Error condition must be checked after calling a library math function that might cause range error |
| CERT FLP34-C (L3): Ensure that floating-point conversions are within range of the new type |
MISRA.CAST.FLOAT.WIDER Cast of floating point expression to a wider floating point type MISRA.CAST.FLOAT_INT Cast of floating point expression to integral type MISRA.CAST.INT_FLOAT Cast of integral expression to floating point type MISRA.CONV.FLOAT Implicit floating-point conversion |
| CERT FLP36-C (L3): Preserve precision when converting integral values to floating-point type |
PORTING.CAST.FLTPNT Cast of a floating point expression to a non floating point type |
| CERT FLP37-C (L3): Do not use object representations to compare floating-point values |
CERT.MEMCMP.FLOAT_MEMBER Do not compare when member is floating point MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES The pointer arguments to the Standard Library function memcmp shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type |
| CERT INT30-C (L2): Ensure that unsigned integer operations do not wrap |
CWARN.NOEFFECT.OUTOFRANGE Value outside of range NUM.OVERFLOW Possible Overflow NUM.OVERFLOW.DF Possible numeric overflow or wraparound |
| CERT INT31-C (L1): Ensure that integer conversions do not result in lost or misinterpreted data |
PORTING.CAST.SIZE Expression is cast to a type of potentially different size |
| CERT INT32-C (L1): Ensure that operations on signed integers do not result in overflow |
CWARN.NOEFFECT.OUTOFRANGE Value outside of range NUM.OVERFLOW Possible Overflow NUM.OVERFLOW.DF Possible numeric overflow or wraparound |
| CERT INT33-C (L2): Ensure that division and remainder operations do not result in divide-by-zero errors |
DBZ.CONST Division by a zero constant occurs DBZ.CONST.CALL The value '0' is passed to function that can use this value as divisor DBZ.GENERAL Division by zero might occur DBZ.GENERAL.FLOAT Division by floating-point zero might occur DBZ.ITERATOR Division by zero might occur in a loop iterator DBZ.ITERATOR.CALL Division by zero might occur in a function call DBZ.ITERATOR.FLOAT Division by zero might occur in a loop iterator |
| CERT INT34-C (L3): 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 |
MISRA.SHIFT.RANGE.2012 Right operand of shift operation is out of range - greater or equal to the essential type size of left operand, or is negative |
| CERT INT36-C (L3): Converting a pointer to integer or integer to pointer |
MISRA.CAST.OBJ_PTR_TO_INT.2012 Conversion performed between a pointer to an object and an integer type |
| CERT MEM30-C (L2): Do not access freed memory |
UFM.DEREF.MIGHT Use of free memory (access) - possible UFM.DEREF.MUST Use of Freed Memory by Pointer UFM.FFM.MIGHT Use of free memory (double free) - possible UFM.FFM.MUST Freeing Freed Memory UFM.RETURN.MIGHT Use of freed memory (return) - possible UFM.RETURN.MUST Use of Freed Memory on Return UFM.USE.MIGHT Use of free memory - possible UFM.USE.MUST Use of Freed Memory |
| CERT MEM31-C (L3): Free dynamically allocated memory when no longer needed |
CL.FFM.ASSIGN Use of free memory (double free) - no operator= CL.FFM.COPY Use of free memory (double free) - no copy constructor CL.SHALLOW.ASSIGN Use of free memory (double free) - shallow copy in operator= CL.SHALLOW.COPY Use of free memory (double free) - shallow copy in copy constructor FMM.MIGHT Freeing Mismatched Memory - possible FMM.MUST Freeing Mismatched Memory |
| CERT MEM33-C (L3): Allocate and copy structures containing a flexible array member dynamically |
MISRA.INCOMPLETE.STRUCT Incomplete struct type is used MISRA.MEMB.FLEX_ARRAY.2012 Flexible array member shall not be declared |
| CERT MEM34-C (L2): Only free memory allocated dynamically |
FNH.MIGHT Freeing Non-Heap Memory - possible FNH.MUST Freeing Non-Heap Memory |
| CERT MEM35-C (L2): Allocate sufficient memory for an object |
INCORRECT.ALLOC_SIZE Incorrect Allocation Size SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation |
| CERT MEM36-C (L3): Do not modify the alignment of objects by calling realloc() |
AUTOSAR.STDLIB.MEMORY Functions malloc, calloc, realloc and free shall not be used |
| CERT MSC30-C (L3): Do not use the rand() function for generating pseudorandom numbers |
CERT.MSC.STD_RAND_CALL Do not use std::rand() for generating pseudorandom numbers |
| CERT MSC32-C (L1): Properly seed pseudorandom number generators |
CERT.MSC.SEED_RANDOM Properly seed pseudorandom number generators |
| CERT MSC33-C (L2): Do not pass invalid data to the asctime() function |
CERT.MSC.ASCTIME Do not pass invalid data to the asctime() function |
| CERT MSC37-C (L2): Ensure that control never reaches the end of a non-void function |
FUNCRET.GEN Non-void function does not return value FUNCRET.IMPLICIT Non-void function implicitly returning int does not return value |
| CERT MSC39-C (L3): Do not call va_arg() on a va_list that has an indeterminate value |
VA.LIST.INDETERMINATE Attempt to call va_arg() on a va_list that has an indeterminate value |
| CERT MSC40-C (L3): Do not violate constraints |
MISRA.FUNC.STATIC.REDECL Function or object redeclaration does not include 'static' modifier |
| CERT MSC41-C (L2): Never hard code sensitive information |
CXX.SV.PWD.PLAIN Attempt to set password using a plain string CXX.SV.PWD.PLAIN.LENGTH Attempt to set password with a length less than 15 characters CXX.SV.PWD.PLAIN.LENGTH.ZERO Attempt to set password with a length of zero characters HCC Use of hardcoded credentials HCC.PWD Use of a hardcoded password HCC.USER Use of a hardcoded user name |
| CERT POS30-C (L1): Use the readlink() function properly |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds |
| CERT POS34-C (L2): Do not call putenv() with a pointer to an automatic variable as the argument |
CERT.PUTENV.AUTO_VARIABLE Do not call putenv() with a pointer to an automatic variable as the argument |
| CERT POS35-C (L2): Avoid race conditions while checking for the existence of a symbolic link |
CERT.STR.ASSIGN.CONST_TO_NONCONST Do not assign a const char pointer to a non-const char pointer SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| CERT POS36-C (L1): Observe correct revocation order while relinquishing privileges |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| CERT POS37-C (L1): Ensure that privilege relinquishment is successful |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| CERT POS39-C (L1): Use the correct byte ordering when transferring data between systems |
BYTEORDER.HTON.SEND Missed conversion from host to network byte order BYTEORDER.HTON.WRITE Missed conversion from host to network byte order BYTEORDER.NTOH.READ Missed conversion from network to host byte order BYTEORDER.NTOH.RECV Missed conversion from network to host byte order |
| CERT POS44-C (L3): Do not use signals to terminate threads |
MISRA.INCL.SIGNAL.2012 The standard header file signal.h shall not be used |
| CERT POS47-C (L3): Do not use threads that can be canceled asynchronously |
CERT.POS.THREAD.ASYNC_CANCEL Do not use threads that can be canceled asynchronously |
| CERT POS51-C (L3): Avoid deadlock with POSIX threads by locking in predefined order |
CONC.DL Deadlock CONC.NO_UNLOCK Missing unlock for variable |
| CERT POS52-C (L3): Do not perform operations that can block while holding a POSIX lock |
CONC.SLEEP Function may block in critical section |
| CERT POS54-C (L1): Detect and handle POSIX library errors |
SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| CERT PRE30-C (L3): Do not create a universal character name through concatenation |
MISRA.DEFINE.SHARP # or ## operator in a macro definition |
| CERT PRE31-C (L2): Avoid side effects in arguments to unsafe macros |
PORTING.VAR.EFFECTS Variable used twice in one expression where one usage is subject to side-effects |
| CERT PRE32-C (L3): Do not use preprocessor directives in invocations of function-like macros |
MISRA.EXPANSION.DIRECTIVE Directive-like tokens within a macro argument |
| CERT SIG30-C (L1): Call only asynchronous-safe functions within signal handlers |
CERT.SIG.SIG_HANDLER.ASYNC_SAFE Call only asynchronous-safe functions within signal handlers |
| CERT SIG31-C (L1): Do not access shared objects in signal handlers |
CERT.SIG.SIG_HANDLER.SHARED_OBJ Do not access shared object in signal handlers CERT.SIG.SIG_HANDLER.SHARED_OBJ.HEAP Do not access shared object in signal handlers CERT.SIG.SIG_HANDLER.SHARED_OBJ.MIGHT Do not access shared object in signal handlers |
| CERT SIG34-C (L3): Do not call signal() from within interruptible signal handlers |
MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| CERT SIG35-C (L3): Do not return from a computational exception signal handler |
CERT.STDLIB.SIGNAL Do not return from a computational exception signal handler |
| CERT STR30-C (L2): Do not attempt to modify string literals |
CERT.STR.ARG.CONST_TO_NONCONST Do not pass a const char pointer to a non-const char pointer argument CERT.STR.ASSIGN.CONST_TO_NONCONST Do not assign a const char pointer to a non-const char pointer |
| CERT STR31-C (L2): Guarantee that storage for strings has sufficient space for character data and the null terminator |
SV.FMT_STR.BAD_SCAN_FORMAT Input format specifier error SV.UNBOUND_STRING_INPUT.FUNC Usage of unbounded string input |
| CERT STR32-C (L1): Do not pass a non-null-terminated character sequence to a library function that expects a string |
NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String SV.STRBO.BOUND_COPY.UNTERM Possible Buffer Overflow in Following String Operations |
| CERT STR34-C (L2): Cast characters to unsigned char before converting to larger integer sizes |
CXX.CAST.SIGNED_CHAR_TO_INTEGER Cast char to unsigned char before converting to larger integer sizes |
| CERT STR37-C (L3): Arguments to character-handling functions must be representable as an unsigned char |
AUTOSAR.STDLIB.CCTYPE.UCHAR Arguments to character-handling functions defined in <cctype> shall be representable as an unsigned char MISRA.ETYPE.ASSIGN.2012 Assignment to an object of a narrower essential type or a different essential type category |
| CERT STR38-C (L1): Do not confuse narrow and wide character strings and functions |
CXX.DIFF.WIDTH.STR_AND_FUNC Implicit cast between narrow and wide character string while calling function |
| CERT WIN30-C (L3): Properly pair allocation and deallocation functions |
FMM.MIGHT Freeing Mismatched Memory - possible FMM.MUST Freeing Mismatched Memory |
| CON33-C(L3) |
CERT.CONC.LIB_FUNC_USE Avoid race conditions when using library functions |
| CON35-C(L3) |
CONC.DL Deadlock CONC.NO_UNLOCK Missing unlock for variable |
| CON36-C(L3) |
CERT.CONC.WAKE_IN_LOOP_C Wrap functions that can spuriously wake up in a loop |
| CON37-C(L3) |
MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| CON38-C(L3) |
CERT.CONC.UNSAFE_COND_VAR_C Preserve thread safety and liveness when using condition variables |
| CON40-C(L2) |
CERT.CONC.ATOMIC_TWICE_EXPR Do not refer to an atomic variable twice in an expression |
| CON41-C(L3) |
CERT.CONC.ATOMIC_COMP_FAIL_IN_LOOP Wrap functions that can spuriously fail up in a loop |
| DCL30-C(L2) |
LOCRET.ARG Function returns address of local variable LOCRET.GLOB Function returns address of local variable LOCRET.RET Function returns address of local variable |
| DCL31-C(L3) |
CWARN.IMPLICITINT Anachronistic 'implicit int' MISRA.DECL.NO_TYPE Declaration without a type MISRA.FUNC.NOPROT.CALL Function is called but has no prototype RETVOID.IMPLICIT Implicitly int function returns void value |
| DCL36-C(L2) |
MISRA.FUNC.STATIC.REDECL Function or object redeclaration does not include 'static' modifier |
| DCL37-C(L3) |
MISRA.DEFINE.WRONGNAME.UNDERSCORE Usage of a reserved name for naming a macro MISRA.STDLIB.WRONGNAME Reused name of standard library macro, object or function MISRA.STDLIB.WRONGNAME.UNDERSCORE Usage of a reserved name for naming a language entity |
| DCL38-C(L3) |
CERT.STRUCT.FLEXIBLE_ARRAY_MEMBER Use the correct syntax when declaring a flexible array member |
| DCL39-C(L3) |
PORTING.STORAGE.STRUCT Byte position of elements in a structure could depend on alignment and packing attributes. |
| DCL40-C(L3) |
MISRA.FUNC.NOPROT.DEF.2012 Function has a definition but no prototype MISRA.FUNC.PARAMS.IDENT Identifiers used in declaration and definition of function are not identical |
| DCL41-C(L2) |
CERT.DCL.SWITCH.VAR_BEFORE_CASE Do not declare variables inside a switch statement before the first case label |
| ENV30-C(L3) |
MISRA.STDLIB.CTYPE.RANGE.2012_AMD1 Any value passed to a function in ctype.h shall be representable as an unsigned char or be the value EOF MISRA.STDLIB.ILLEGAL_REUSE.2012_AMD1 The pointer returned by the Standard Library functions asctime and similar shall not be used following a subsequent call to the same function MISRA.STDLIB.ILLEGAL_WRITE.2012_AMD1 The pointers returned by the Standard Library functions localeconv, getenv, setlocale or, strerror shall only be used as if they have pointer to const-qualified type |
| ENV32-C(L1) |
CERT.EXIT.HANDLER_TERMINATE All exit handlers must return normally |
| ENV33-C(L1) |
SV.CODE_INJECTION.SHELL_EXEC Command Injection into Shell Execution |
| ENV34-C(L3) |
MISRA.STDLIB.ILLEGAL_REUSE.2012_AMD1 The pointer returned by the Standard Library functions asctime and similar shall not be used following a subsequent call to the same function |
| ERR30-C(L1) |
CXX.ERRNO.INCORRECTLY_CHECKED Errno condition check not required after calling library function CXX.ERRNO.NOT_CHECKED Errno condition check is missing after calling library function CXX.ERRNO.NOT_SET Errno is not reset to zero before calling library function |
| ERR32-C(L3) |
MISRA.INCL.SIGNAL.2012 The standard header file signal.h shall not be used MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| ERR33-C(L1) |
NPD.CHECK.MUST Pointer will be dereferenced after it was positively checked for NULL NPD.FUNC.MUST Result of function that may return NULL will be dereferenced SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| ERR34-C(L2) |
CERT.ERR.CONV.STR_TO_NUM Detect errors when converting a string to a number MISRA.STDLIB.ATOI Use of 'atof', 'atoi' or 'atol' from library stdlib.h SV.BANNED.RECOMMENDED.SCANF Banned recommended API: unsafe scanf-type functions |
| EXP30-C(L2) |
MISRA.INCR_DECR.OTHER Increment or decrement operator is mixed with other operators in expression PORTING.VAR.EFFECTS Variable used twice in one expression where one usage is subject to side-effects |
| EXP32-C(L2) |
CERT.EXPR.VOLATILE.ADDR Do not access a volatile object through a nonvolatile pointer CERT.EXPR.VOLATILE.ADDR.PARAM Do not pass a volatile object to a function through a nonvolatile pointer CERT.EXPR.VOLATILE.PTRPTR Do not assign a reference to a non-volatile pointer to a volatile pointer-to-pointer |
| EXP33-C(L1) |
UNINIT.HEAP.MIGHT Uninitialized Heap Use - possible UNINIT.HEAP.MUST Uninitialized Heap Use UNINIT.STACK.ARRAY.MIGHT Uninitialized Array - possible UNINIT.STACK.ARRAY.MUST Uninitialized Array UNINIT.STACK.ARRAY.PARTIAL.MUST Partially Uninitialized Array UNINIT.STACK.MIGHT Uninitialized Variable - possible UNINIT.STACK.MUST Uninitialized Variable |
| EXP34-C(L1) |
NPD.CHECK.CALL.MIGHT Pointer may be passed to function that can dereference it after it was positively checked for NULL NPD.CHECK.CALL.MUST Pointer will be passed to function that may dereference it after it was positively checked for NULL NPD.CHECK.MIGHT Pointer may be dereferenced after it was positively checked for NULL NPD.CHECK.MUST Pointer will be dereferenced after it was positively checked for NULL NPD.CONST.CALL NULL is passed to function that can dereference it NPD.CONST.DEREF NULL is dereferenced NPD.FUNC.CALL.MIGHT Result of function that may return NULL may be passed to another function that may dereference it NPD.FUNC.CALL.MUST Result of function that may return NULL will be passed to another function that may dereference it NPD.FUNC.MIGHT Result of function that can return NULL may be dereferenced NPD.FUNC.MUST Result of function that may return NULL will be dereferenced NPD.GEN.CALL.MIGHT Null pointer may be passed to function that may dereference it NPD.GEN.CALL.MUST Null pointer will be passed to function that may dereference it NPD.GEN.MIGHT Null pointer may be dereferenced NPD.GEN.MUST Null pointer will be dereferenced RNPD.CALL Suspicious dereference of pointer in function call before NULL check RNPD.DEREF Suspicious dereference of pointer before NULL check |
| EXP36-C(L3) |
MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012 Cast between a pointer to object type and a pointer to a different object type |
| EXP37-C(L3) |
MISRA.FUNC.UNMATCHED.PARAMS Number of formal and actual parameters passed to function do not match |
| EXP39-C(L3) |
MISRA.CAST.FUNC_PTR.2012 Conversion performed between a pointer to a function and another incompatible type MISRA.CAST.INCOMPLETE_PTR_TO_ANY.2012 Conversion performed between a pointer to an incomplete type and a different type MISRA.CAST.OBJ_PTR_TO_NON_INT.2012 A cast between a pointer to object and a non-integer arithmetic type MISRA.CAST.OBJ_PTR_TO_OBJ_PTR.2012 Cast between a pointer to object type and a pointer to a different object type |
| EXP42-C(L1) |
MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES The pointer arguments to the Standard Library function memcmp shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type |
| EXP43-C(L3) |
MISRA.TYPE.RESTRICT.QUAL.2012 The restrict type qualifier shall not be used |
| EXP44-C(L3) |
MISRA.SIZEOF.SIDE_EFFECT Operand of sizeof has side effects |
| EXP45-C(L2) |
ASSIGCOND.CALL Assignment in condition (call) ASSIGCOND.GEN Assignment in condition MISRA.ASSIGN.COND Assignment operator is used in a condition |
| EXP46-C(L2) |
MISRA.LOGIC.OPERATOR.NOT_BOOL Operand of non-logical operator is effectively boolean |
| EXP47-C(L2) |
CERT.VA_ARG.TYPE Do not call va_arg with an argument of the incorrect type |
| FIO30-C(L1) |
SV.FMTSTR.GENERIC Format String Vulnerability SV.TAINTED.FMTSTR Use of Unvalidated Data in a Format String |
| FIO34-C(L1) |
CWARN.CMPCHR.EOF A 'char' expression compared with EOF constant |
| FIO37-C(L1) |
CERT.FIO.FGETS Do not assume that fgets() or fgetws() returns a nonempty string when successful |
| FIO38-C(L3) |
MISRA.FILE_PTR.DEREF.2012 A pointer to a FILE object shall not be dereferenced MISRA.FILE_PTR.DEREF.CAST.2012 Object is casted to a FILE pointer, and it shall not be dereferenced MISRA.FILE_PTR.DEREF.INDIRECT.2012 A pointer to a FILE object shall not be indirectly dereferenced by a system function MISRA.FILE_PTR.DEREF.RETURN.2012 A pointer to a FILE object (returned by function) shall not be dereferenced |
| FIO39-C(L2) |
CERT.FIO.NO_FLUSH Flush or positioning function call missing |
| FIO42-C(L3) |
RH.LEAK Resource leak |
| FIO44-C(L3) |
CERT.FSETPOS.VALUE Only use values for fsetpos() that are returned from fgetpos() |
| FIO45-C(L2) |
SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| FIO46-C(L3) |
SV.INCORRECT_RESOURCE_HANDLING.URH Insecure Resource Handling |
| FIO47-C(L2) |
SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD Incompatible type of a print function parameter SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED Unexpected type of a print function parameter SV.FMT_STR.PRINT_IMPROP_LENGTH Improper use of length modifier in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD Incompatible type of a scan function parameter SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED Unexpected type of a scan function parameter SV.FMT_STR.SCAN_IMPROP_LENGTH Improper use of length modifier in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW Too few arguments in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY Too many arguments in a scan function call SV.FMT_STR.UNKWN_FORMAT Unknown format specifier in a print function call |
| FLP30-C(L2) |
MISRA.FOR.COUNTER.FLT For loop counter has a floating point type |
| FLP32-C(L1) |
CERT.MATH.DOMAIN.CHECK One or more arguments passed to a standard library math function are outside its valid domain CERT.MATH.RANGE.CHECK Error condition must be checked after calling a library math function that might cause range error |
| FLP34-C(L3) |
MISRA.CAST.FLOAT.WIDER Cast of floating point expression to a wider floating point type MISRA.CAST.FLOAT_INT Cast of floating point expression to integral type MISRA.CAST.INT_FLOAT Cast of integral expression to floating point type MISRA.CONV.FLOAT Implicit floating-point conversion |
| FLP36-C(L3) |
PORTING.CAST.FLTPNT Cast of a floating point expression to a non floating point type |
| FLP37-C(L3) |
CERT.MEMCMP.FLOAT_MEMBER Do not compare when member is floating point MISRA.STDLIB.MEMCMP.PTR_ARG_TYPES The pointer arguments to the Standard Library function memcmp shall point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type |
| INT30-C(L2) |
CWARN.NOEFFECT.OUTOFRANGE Value outside of range NUM.OVERFLOW Possible Overflow NUM.OVERFLOW.DF Possible numeric overflow or wraparound |
| INT31-C(L1) |
PORTING.CAST.SIZE Expression is cast to a type of potentially different size |
| INT32-C(L1) |
CWARN.NOEFFECT.OUTOFRANGE Value outside of range NUM.OVERFLOW Possible Overflow NUM.OVERFLOW.DF Possible numeric overflow or wraparound |
| INT33-C(L2) |
DBZ.CONST Division by a zero constant occurs DBZ.CONST.CALL The value '0' is passed to function that can use this value as divisor DBZ.GENERAL Division by zero might occur DBZ.GENERAL.FLOAT Division by floating-point zero might occur DBZ.ITERATOR Division by zero might occur in a loop iterator DBZ.ITERATOR.CALL Division by zero might occur in a function call DBZ.ITERATOR.FLOAT Division by zero might occur in a loop iterator |
| INT34-C(L3) |
MISRA.SHIFT.RANGE.2012 Right operand of shift operation is out of range - greater or equal to the essential type size of left operand, or is negative |
| INT36-C(L3) |
MISRA.CAST.OBJ_PTR_TO_INT.2012 Conversion performed between a pointer to an object and an integer type |
| MEM30-C(L2) |
UFM.DEREF.MIGHT Use of free memory (access) - possible UFM.DEREF.MUST Use of Freed Memory by Pointer UFM.FFM.MIGHT Use of free memory (double free) - possible UFM.FFM.MUST Freeing Freed Memory UFM.RETURN.MIGHT Use of freed memory (return) - possible UFM.RETURN.MUST Use of Freed Memory on Return UFM.USE.MIGHT Use of free memory - possible UFM.USE.MUST Use of Freed Memory |
| MEM31-C(L3) |
CL.FFM.ASSIGN Use of free memory (double free) - no operator= CL.FFM.COPY Use of free memory (double free) - no copy constructor CL.SHALLOW.ASSIGN Use of free memory (double free) - shallow copy in operator= CL.SHALLOW.COPY Use of free memory (double free) - shallow copy in copy constructor FMM.MIGHT Freeing Mismatched Memory - possible FMM.MUST Freeing Mismatched Memory |
| MEM33-C(L3) |
MISRA.INCOMPLETE.STRUCT Incomplete struct type is used MISRA.MEMB.FLEX_ARRAY.2012 Flexible array member shall not be declared |
| MEM34-C(L2) |
FNH.MIGHT Freeing Non-Heap Memory - possible FNH.MUST Freeing Non-Heap Memory |
| MEM35-C(L2) |
INCORRECT.ALLOC_SIZE Incorrect Allocation Size SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation |
| MEM36-C(L3) |
AUTOSAR.STDLIB.MEMORY Functions malloc, calloc, realloc and free shall not be used |
| MSC30-C(L3) |
CERT.MSC.STD_RAND_CALL Do not use std::rand() for generating pseudorandom numbers |
| MSC32-C(L1) |
CERT.MSC.SEED_RANDOM Properly seed pseudorandom number generators |
| MSC33-C(L2) |
CERT.MSC.ASCTIME Do not pass invalid data to the asctime() function |
| MSC37-C(L2) |
FUNCRET.GEN Non-void function does not return value FUNCRET.IMPLICIT Non-void function implicitly returning int does not return value |
| MSC39-C(L3) |
VA.LIST.INDETERMINATE Attempt to call va_arg() on a va_list that has an indeterminate value |
| MSC40-C(L3) |
MISRA.FUNC.STATIC.REDECL Function or object redeclaration does not include 'static' modifier |
| MSC41-C(L2) |
CXX.SV.PWD.PLAIN Attempt to set password using a plain string CXX.SV.PWD.PLAIN.LENGTH Attempt to set password with a length less than 15 characters CXX.SV.PWD.PLAIN.LENGTH.ZERO Attempt to set password with a length of zero characters HCC Use of hardcoded credentials HCC.PWD Use of a hardcoded password HCC.USER Use of a hardcoded user name |
| POS30-C(L1) |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds |
| POS34-C(L2) |
CERT.PUTENV.AUTO_VARIABLE Do not call putenv() with a pointer to an automatic variable as the argument |
| POS35-C(L2) |
CERT.STR.ASSIGN.CONST_TO_NONCONST Do not assign a const char pointer to a non-const char pointer SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| POS36-C(L1) |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| POS37-C(L1) |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| POS39-C(L1) |
BYTEORDER.HTON.SEND Missed conversion from host to network byte order BYTEORDER.HTON.WRITE Missed conversion from host to network byte order BYTEORDER.NTOH.READ Missed conversion from network to host byte order BYTEORDER.NTOH.RECV Missed conversion from network to host byte order |
| POS44-C(L3) |
MISRA.INCL.SIGNAL.2012 The standard header file signal.h shall not be used |
| POS47-C(L3) |
CERT.POS.THREAD.ASYNC_CANCEL Do not use threads that can be canceled asynchronously |
| POS51-C(L3) |
CONC.DL Deadlock CONC.NO_UNLOCK Missing unlock for variable |
| POS52-C(L3) |
CONC.SLEEP Function may block in critical section |
| POS54-C(L1) |
SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| PRE30-C(L3) |
MISRA.DEFINE.SHARP # or ## operator in a macro definition |
| PRE31-C(L2) |
PORTING.VAR.EFFECTS Variable used twice in one expression where one usage is subject to side-effects |
| PRE32-C(L3) |
MISRA.EXPANSION.DIRECTIVE Directive-like tokens within a macro argument |
| SIG30-C(L1) |
CERT.SIG.SIG_HANDLER.ASYNC_SAFE Call only asynchronous-safe functions within signal handlers |
| SIG31-C(L1) |
CERT.SIG.SIG_HANDLER.SHARED_OBJ Do not access shared object in signal handlers CERT.SIG.SIG_HANDLER.SHARED_OBJ.HEAP Do not access shared object in signal handlers CERT.SIG.SIG_HANDLER.SHARED_OBJ.MIGHT Do not access shared object in signal handlers |
| SIG34-C(L3) |
MISRA.STDLIB.SIGNAL Use of the signal handling facilities of signal.h |
| SIG35-C(L3) |
CERT.STDLIB.SIGNAL Do not return from a computational exception signal handler |
| STR30-C(L2) |
CERT.STR.ARG.CONST_TO_NONCONST Do not pass a const char pointer to a non-const char pointer argument CERT.STR.ASSIGN.CONST_TO_NONCONST Do not assign a const char pointer to a non-const char pointer |
| STR31-C(L2) |
SV.FMT_STR.BAD_SCAN_FORMAT Input format specifier error SV.UNBOUND_STRING_INPUT.FUNC Usage of unbounded string input |
| STR32-C(L1) |
NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String SV.STRBO.BOUND_COPY.UNTERM Possible Buffer Overflow in Following String Operations |
| STR34-C(L2) |
CXX.CAST.SIGNED_CHAR_TO_INTEGER Cast char to unsigned char before converting to larger integer sizes |
| STR37-C(L3) |
AUTOSAR.STDLIB.CCTYPE.UCHAR Arguments to character-handling functions defined in <cctype> shall be representable as an unsigned char MISRA.ETYPE.ASSIGN.2012 Assignment to an object of a narrower essential type or a different essential type category |
| STR38-C(L1) |
CXX.DIFF.WIDTH.STR_AND_FUNC Implicit cast between narrow and wide character string while calling function |
| WIN30-C(L3) |
FMM.MIGHT Freeing Mismatched Memory - possible FMM.MUST Freeing Mismatched Memory |
| _Alignof |
MISRA.SIZEOF.SIDE_EFFECT Operand of sizeof has side effects |
| and check errno only after the function returns a value indicating failure |
CXX.ERRNO.INCORRECTLY_CHECKED Errno condition check not required after calling library function CXX.ERRNO.NOT_CHECKED Errno condition check is missing after calling library function CXX.ERRNO.NOT_SET Errno is not reset to zero before calling library function |
| or _Generic |
MISRA.SIZEOF.SIDE_EFFECT Operand of sizeof has side effects |
CERT C recommendations
| Rule | Checker name and description |
|---|---|
| ARR00-C(L2) |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds ABV.MEMBER Buffer Overflow - Array Index Out of Bounds ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String SV.STRBO.BOUND_COPY.OVERFLOW Buffer Overflow in Bound String Copy SV.STRBO.BOUND_COPY.UNTERM Possible Buffer Overflow in Following String Operations SV.STRBO.BOUND_SPRINTF Buffer Overflow in Bound sprintf SV.STRBO.UNBOUND_COPY Buffer Overflow in Unbound String Copy SV.STRBO.UNBOUND_SPRINTF Buffer Overflow in Unbound sprintf SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation SV.TAINTED.CALL.INDEX_ACCESS Use of Unvalidated Integer as Array Index by Function Call SV.TAINTED.CALL.LOOP_BOUND Use of Unvalidated Integer in Loop Condition through a Function Call SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition SV.UNBOUND_STRING_INPUT.CIN Usage of cin for unbounded string input SV.UNBOUND_STRING_INPUT.FUNC Usage of unbounded string input |
| ARR01-C(L1) |
CWARN.MEMSET.SIZEOF.PTR Memset-like function is called for 'sizeof' applied to pointer |
| CERT ARR00-C (L2): Understand how arrays work |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds ABV.MEMBER Buffer Overflow - Array Index Out of Bounds ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String SV.STRBO.BOUND_COPY.OVERFLOW Buffer Overflow in Bound String Copy SV.STRBO.BOUND_COPY.UNTERM Possible Buffer Overflow in Following String Operations SV.STRBO.BOUND_SPRINTF Buffer Overflow in Bound sprintf SV.STRBO.UNBOUND_COPY Buffer Overflow in Unbound String Copy SV.STRBO.UNBOUND_SPRINTF Buffer Overflow in Unbound sprintf SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation SV.TAINTED.CALL.INDEX_ACCESS Use of Unvalidated Integer as Array Index by Function Call SV.TAINTED.CALL.LOOP_BOUND Use of Unvalidated Integer in Loop Condition through a Function Call SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition SV.UNBOUND_STRING_INPUT.CIN Usage of cin for unbounded string input SV.UNBOUND_STRING_INPUT.FUNC Usage of unbounded string input |
| CERT ARR01-C (L1): Do not apply the sizeof operator to a pointer when taking the size of an array |
CWARN.MEMSET.SIZEOF.PTR Memset-like function is called for 'sizeof' applied to pointer |
| CERT CON05-C (L3): Do not perform operations that can block while holding a lock |
CONC.SLEEP Function may block in critical section |
| CERT DCL01-C (L3): Do not reuse variable names in subscopes |
MISRA.VAR.HIDDEN Identifier declared in an inner scope hides identifier in outer scope |
| CERT DCL06-C (L3): Use meaningful symbolic constants to represent literal values |
CERT.LITERAL.ARRAY Use meaningful symbolic constants to represent literal array size values CERT.LITERAL.BITFIELD Use meaningful symbolic constants to represent literal bit-field values CERT.LITERAL.CHAR.CONST Use meaningful symbolic constants to represent literal character values CERT.LITERAL.FLT.CONST Use meaningful symbolic constants to represent literal float values CERT.LITERAL.INT.CONST Use meaningful symbolic constants to represent literal integer values CERT.LITERAL.STR.CONST Use meaningful symbolic constants to represent literal string values |
| CERT DCL07-C (L3): Include the appropriate type information in function declarators |
MISRA.CAST.FUNC_PTR.2012 Conversion performed between a pointer to a function and another incompatible type MISRA.FUNC.NOPROT.DEF.2012 Function has a definition but no prototype MISRA.FUNC.PROT_FORM.KR.2012 Function types shall be in prototype form |
| CERT DCL10-C (L2): Maintain the contract between the writer and caller of variadic functions |
SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW Too few arguments in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY Too many arguments in a scan function call |
| CERT DCL11-C (L1): Understand the type issues associated with variadic functions |
MISRA.FUNC.VARARG Function with variable number of arguments SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD Incompatible type of a print function parameter SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED Unexpected type of a print function parameter SV.FMT_STR.PRINT_IMPROP_LENGTH Improper use of length modifier in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD Incompatible type of a scan function parameter SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED Unexpected type of a scan function parameter SV.FMT_STR.UNKWN_FORMAT.SCAN Unknown format specifier in a scan function call |
| CERT DCL13-C (L3): Declare function parameters that are pointers to values not changed by the function as const |
MISRA.PPARAM.NEEDS.CONST Pointer parameter is not used to modify the addressed object but is not declared as a pointer to const |
| CERT DCL18-C (L3): Do not begin integer constants with 0 when specifying a decimal value |
MISRA.TOKEN.OCTAL.ESCAPE Usage of octal escape sequences MISRA.TOKEN.OCTAL.INT Usage of octal integer constants |
| CERT DCL19-C (L3): Minimize the scope of variables and methods |
CERT.STATIC.SINGLE.USE File scope static variable is only accessed in one function CERT.TU.UNUSED.GLOBAL.DECL Global identifier is declared but is not used in this translation unit CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN Visibility of extern global variable is too wide CXX.ID_VIS.GLOBAL_VARIABLE.STATIC Visibility of static global variable is too wide MISRA.VAR.MIN.VIS Name visibility is too wide |
| CERT DCL20-C (L1): Explicitly specify void when a function accepts no arguments |
MISRA.FUNC.NO_PARAMS Function without parameters is missing void parameter type |
| CERT DCL23-C (L2): Guarantee that mutually visible identifiers are unique |
MISRA.IDENT.DISTINCT.C99.2012 Identifiers declared in the same scope or name space are not distinct |
| CERT ENV01-C (L2): Do not make assumptions about the size of an environment variable |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds ABV.MEMBER Buffer Overflow - Array Index Out of Bounds ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds |
| CERT EXP00-C (L2): Use parentheses for precedence of operation |
CERT.EXPR.PARENS The precedence of operators within expressions should be made explicit. |
| CERT EXP02-C (L3): Be aware of the short-circuit behavior of the logical AND and OR operators |
MISRA.LOGIC.SIDEEFF Right operand in a logical 'and' or 'or' expression contains side effects |
| CERT EXP08-C (L2): Ensure pointer arithmetic is used correctly |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds |
| CERT EXP10-C (L2): Do not depend on the order of evaluation of subexpressions or the order in which side effects take place |
CERT.MULTI.FUNC.ARG.CALLS Do not depend on the order of evaluation of subexpressions or the order in which side effects take place |
| CERT EXP12-C (L3): Do not ignore values returned by functions |
MISRA.FUNC.UNUSEDRET.2012 The return value of a non-void function shall be used. SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| CERT EXP15-C (L1): Do not place a semicolon on the same line as an if |
SEMICOL Suspiciously placed semicolon |
| CERT EXP16-C (L2): Do not compare function pointers to constant values |
CWARN.FUNCADDR Function address is used instead of a call to this function CWARN.NULLCHECK.FUNCNAME Function address was directly compared against 0 |
| CERT EXP19-C (L1): Use braces for the body of an if |
MISRA.IF.NO_COMPOUND The body of if/else statement is not a compound statement MISRA.STMT.NO_COMPOUND The body of switch, while, do/while or for statement is not a compound statement |
| CERT FIO01-C (L1): Be careful using functions that use file names for identification |
SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| CERT FIO02-C (L3): Canonicalize path names originating from tainted sources |
SV.DLLPRELOAD.NONABSOLUTE.DLL Potential DLL-preload hijack vector SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| CERT FIO22-C (L3): Close files before spawning processes |
RH.LEAK Resource leak |
| CERT FLP07-C (L3): Cast the return value of a function that returns a floating-point type |
CERT.RTN.FLT.CAST.DBL Cast the return value of a function that returns a floating-point type CERT.RTN.FLT.IMPLICIT.CAST.DBL Cast the return value of a function that returns a floating-point type |
| CERT INT02-C (L3): Understand integer conversion rules |
MISRA.CAST.INT Non-trivial integer expression is cast to a wider type, or type with a different signedness MISRA.CAST.UNSIGNED_BITS The result of bitwise operation on unsigned char or short is not cast back to original type MISRA.CONV.INT.SIGN Implicit integral conversion changes signedness MISRA.CVALUE.IMPL.CAST The value of an expression implicitly converted to a different type MISRA.UMINUS.UNSIGNED Operand of unary minus is unsigned PRECISION.LOSS Loss of Precision |
| CERT INT04-C (L1): Enforce limits on integer values originating from tainted sources |
SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation SV.TAINTED.BINOP Use of Unvalidated Integer in Binary Operation SV.TAINTED.CALL.BINOP Use of Unvalidated Integer in Binary Operation SV.TAINTED.CALL.INDEX_ACCESS Use of Unvalidated Integer as Array Index by Function Call SV.TAINTED.CALL.LOOP_BOUND Use of Unvalidated Integer in Loop Condition through a Function Call SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition |
| CERT INT07-C (L1): Use only explicitly signed or unsigned char type for numeric values |
PORTING.SIGNED.CHAR 'char' used without explicitly specifying signedness |
| CERT INT09-C (L3): Ensure enumeration constants map to unique values |
MISRA.ENUM.IMPLICIT.VAL.NON_UNIQUE.2012 Implicit enumerator value is not unique |
| CERT INT12-C (L3): Do not make assumptions about the type of a plain int bit-field when used in an expression |
MISRA.BITFIELD.TYPE Type of bit-field is not signed/unsigned integer |
| CERT INT13-C (L2): Use bitwise operators only on unsigned operands |
MISRA.BITS.NOT_UNSIGNED Operand of bitwise operation is not unsigned integer MISRA.BITS.NOT_UNSIGNED.PREP Operand of bitwise operation is not unsigned integer |
| CERT INT18-C (L1): Evaluate integer expressions in a larger size before comparing or assigning to that size |
PORTING.CAST.SIZE Expression is cast to a type of potentially different size |
| CERT MEM00-C (L1): Allocate and free memory in the same module |
FNH.MIGHT Freeing Non-Heap Memory - possible FNH.MUST Freeing Non-Heap Memory FUM.GEN.MIGHT Freeing Unallocated Memory - possible FUM.GEN.MUST Freeing Unallocated Memory MLK.MIGHT Memory Leak - possible MLK.MUST Memory Leak MLK.RET.MIGHT Memory Leak - possible MLK.RET.MUST Memory Leak RH.LEAK Resource leak UFM.DEREF.MIGHT Use of free memory (access) - possible UFM.DEREF.MUST Use of Freed Memory by Pointer UFM.FFM.MIGHT Use of free memory (double free) - possible UFM.FFM.MUST Freeing Freed Memory UFM.RETURN.MIGHT Use of freed memory (return) - possible UFM.RETURN.MUST Use of Freed Memory on Return UFM.USE.MIGHT Use of free memory - possible UFM.USE.MUST Use of Freed Memory |
| CERT MEM04-C (L2): Beware of zero-length allocations |
MISRA.LANG.OBSOLESCENT.REALLOC_ZERO_SIZE.2023 Invoking 'realloc' with a size argument equal to zero is an obsolescent feature |
| CERT MEM05-C (L1): Avoid large stack allocations |
MISRA.FUNC.RECUR Recursive function |
| CERT MEM12-C (L3): Consider using a goto chain when leaving a function on error when using and releasing resources |
MLK.MIGHT Memory Leak - possible MLK.MUST Memory Leak MLK.RET.MIGHT Memory Leak - possible MLK.RET.MUST Memory Leak RH.LEAK Resource leak |
| CERT MSC01-C (L3): Strive for logical completeness |
CWARN.EMPTY.LABEL Empty label statement INFINITE_LOOP.GLOBAL Infinite loop INFINITE_LOOP.LOCAL Infinite loop INFINITE_LOOP.MACRO Infinite loop LA_UNUSED Label unused MISRA.IF.NO_ELSE A chain of if/else-if statements is not terminated with else or is terminated with an empty else clause MISRA.SWITCH.WELL_FORMED.DEFAULT.2012 Every switch statement shall have a default label. |
| CERT MSC07-C (L3): Detect and remove dead code [Deprecated] |
INVARIANT_CONDITION.UNREACH Invariant expression in a condition LA_UNUSED Label unused UNREACH.ENUM Code is unreachable due to the possible value(s) of an enum UNREACH.GEN Unreachable code UNREACH.RETURN Unreachable Void Return UNREACH.SIZEOF Architecture-related unreachable code |
| CERT MSC12-C (L3): Detect and remove code that has no effect or is never executed |
CWARN.NOEFFECT.SELF_ASSIGN A variable is assigned to self CWARN.NOEFFECT.UCMP.GE Comparison of unsigned value against 0 is always true CWARN.NOEFFECT.UCMP.GE.MACRO Comparison of unsigned value against 0 within a macro is always true CWARN.NOEFFECT.UCMP.LT Comparison of unsigned value against 0 is always false CWARN.NOEFFECT.UCMP.LT.MACRO Comparison of unsigned value against 0 within a macro is always false CWARN.NULLCHECK.FUNCNAME Function address was directly compared against 0 EFFECT Statement has no effect INVARIANT_CONDITION.UNREACH Invariant expression in a condition LA_UNUSED Label unused MISRA.STMT.NO_EFFECT The statement has no side effects, and does not change control flow UNREACH.ENUM Code is unreachable due to the possible value(s) of an enum UNREACH.GEN Unreachable code UNREACH.RETURN Unreachable Void Return UNREACH.SIZEOF Architecture-related unreachable code VA_UNUSED.GEN Value is Never Used after Assignment VA_UNUSED.INIT Value is Never Used after Initialization |
| CERT MSC13-C (L3): Detect and remove unused values |
LV_UNUSED.GEN Local variable unused VA_UNUSED.GEN Value is Never Used after Assignment VA_UNUSED.INIT Value is Never Used after Initialization |
| CERT MSC14-C (L3): Do not introduce unnecessary platform dependencies |
CERT.ALIGNOF Use of '__alignof__' is a language extension CERT.ANONYMOUS.STRUCT Definition of an anonymous struct object is a language extension CERT.ANONYMOUS.UNION Definition of an anonymous union object is a language extension CERT.ARRAY.LENGTH.ZERO Arrays of length zero are a language extension CERT.BITFIELD.NOT.INT Bit-field not defined as 'int' type is a language extension CERT.BITFIELD.SIGN.MODIFIER Bit-field not defined as signed or unsigned is implementation defined CERT.EMPTY.AGR.INIT Empty aggregate initializers are a language extension CERT.ENUM.LITERAL.TYPE.INT Enumeration literal constant is not of type int CERT.ENUM.TYPE.SPECIFIER Non-standard extended enum type specifier is a language extension CERT.FIXED.MEMORY.ADDRESS Use of '@ address' is a language extension CERT.LITERAL.BINARY Use of binary constant is a language extension CERT.LITERAL.MULTIBYTE.CHAR Assignment of multi-byte character constant is implementation defined CERT.LITERAL.OCTAL Use of octal constant is a language extension CERT.LITERAL.SUFFIX.I64 Use of I64 or UI64 as an integer constant suffix is a language extension CERT.NAME.DOLLAR.CHAR Use '$' of character in object name is not a legal identifier in ISO C CERT.STMT.EXPR Use of a statement expression is a language extension CERT.STR.RANGE.FORMATTER Use of string range formatter is implementation defined CERT.TYPEOF Use of '__typeof__' is a language extension CERT.UNNAMED.MEMBER Definition of an unnamed member in a struct or union is a language extension |
| CERT MSC17-C (L1): Finish every set of statements associated with a case label with a break statement |
MISRA.SWITCH.WELL_FORMED.BREAK.2012 An unconditional break statement shall terminate every switch-clause. |
| CERT POS02-C (L2): Follow the principle of least privilege |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| CERT POS05-C (L3): Limit access to files by creating a jail |
CERT.CHROOT Use of chroot function CERT.CHROOT.CHDIR Call to 'chroot' function is not followed by call to 'chdir' |
| CERT PRE00-C (L3): Prefer inline or static functions to function-like macros |
MISRA.DEFINE.FUNC Function-like macro definition |
| CERT PRE01-C (L1): Use parentheses within macros around parameter names |
MISRA.DEFINE.NOPARS Macro parameter with no parentheses |
| CERT PRE02-C (L1): Macro replacement lists should be parenthesized |
MISRA.DEFINE.BADEXP Inappropriate macro expansion |
| CERT PRE05-C (L3): Understand macro replacement when concatenating tokens or performing stringification |
MISRA.DEFINE.SHARP.ORDER.2012 Unspecified order of evaluation of multiple '#' or '##' |
| CERT PRE06-C (L3): Enclose header files in an inclusion guard |
MISRA.INCGUARD Include guard is not provided |
| CERT PRE10-C (L1): Wrap multistatement macros in a do-while loop |
MISRA.DEFINE.BADEXP Inappropriate macro expansion |
| CERT STR02-C (L2): Sanitize data passed to complex subsystems |
NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String SV.TAINTED.INJECTION Command Injection |
| CERT STR03-C (L3): Do not inadvertently truncate a string |
NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String |
| CERT STR05-C (L3): Use pointers to const when referring to string literals |
MISRA.STRING_LITERAL.NON_CONST.2012 A string literal shall not be assigned to an object unless the object's type is pointer to const-qualified char |
| CERT WIN00-C (L2): Be specific when dynamically loading libraries |
SV.DLLPRELOAD.NONABSOLUTE.DLL Potential DLL-preload hijack vector SV.DLLPRELOAD.NONABSOLUTE.EXE Potential process injection vector SV.DLLPRELOAD.SEARCHPATH Do not use SearchPath to find DLLs |
| CON05-C(L3) |
CONC.SLEEP Function may block in critical section |
| DCL01-C(L3) |
MISRA.VAR.HIDDEN Identifier declared in an inner scope hides identifier in outer scope |
| DCL06-C(L3) |
CERT.LITERAL.ARRAY Use meaningful symbolic constants to represent literal array size values CERT.LITERAL.BITFIELD Use meaningful symbolic constants to represent literal bit-field values CERT.LITERAL.CHAR.CONST Use meaningful symbolic constants to represent literal character values CERT.LITERAL.FLT.CONST Use meaningful symbolic constants to represent literal float values CERT.LITERAL.INT.CONST Use meaningful symbolic constants to represent literal integer values CERT.LITERAL.STR.CONST Use meaningful symbolic constants to represent literal string values |
| DCL07-C(L3) |
MISRA.CAST.FUNC_PTR.2012 Conversion performed between a pointer to a function and another incompatible type MISRA.FUNC.NOPROT.DEF.2012 Function has a definition but no prototype MISRA.FUNC.PROT_FORM.KR.2012 Function types shall be in prototype form |
| DCL10-C(L2) |
SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW Too few arguments in a scan function call SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY Too many arguments in a scan function call |
| DCL11-C(L1) |
MISRA.FUNC.VARARG Function with variable number of arguments SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD Incompatible type of a print function parameter SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED Unexpected type of a print function parameter SV.FMT_STR.PRINT_IMPROP_LENGTH Improper use of length modifier in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW Too few arguments in a print function call SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY Too many arguments in a print function call SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD Incompatible type of a scan function parameter SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED Unexpected type of a scan function parameter SV.FMT_STR.UNKWN_FORMAT.SCAN Unknown format specifier in a scan function call |
| DCL13-C(L3) |
MISRA.PPARAM.NEEDS.CONST Pointer parameter is not used to modify the addressed object but is not declared as a pointer to const |
| DCL18-C(L3) |
MISRA.TOKEN.OCTAL.ESCAPE Usage of octal escape sequences MISRA.TOKEN.OCTAL.INT Usage of octal integer constants |
| DCL19-C(L3) |
CERT.STATIC.SINGLE.USE File scope static variable is only accessed in one function CERT.TU.UNUSED.GLOBAL.DECL Global identifier is declared but is not used in this translation unit CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN Visibility of extern global variable is too wide CXX.ID_VIS.GLOBAL_VARIABLE.STATIC Visibility of static global variable is too wide MISRA.VAR.MIN.VIS Name visibility is too wide |
| DCL20-C(L1) |
MISRA.FUNC.NO_PARAMS Function without parameters is missing void parameter type |
| DCL23-C(L2) |
MISRA.IDENT.DISTINCT.C99.2012 Identifiers declared in the same scope or name space are not distinct |
| ENV01-C(L2) |
ABV.ANY_SIZE_ARRAY Buffer Overflow - Array Index Out of Bounds ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds ABV.MEMBER Buffer Overflow - Array Index Out of Bounds ABV.STACK Buffer Overflow - Local Array Index Out of Bounds ABV.TAINTED Buffer Overflow from Unvalidated Input ABV.UNICODE.BOUND_MAP Buffer overflow in mapping character function ABV.UNICODE.FAILED_MAP Mapping function failed ABV.UNICODE.NNTS_MAP Buffer overflow in mapping character function ABV.UNICODE.SELF_MAP Mapping function failed ABV.UNKNOWN_SIZE Buffer Overflow - Array Index Out of Bounds |
| EXP00-C(L2) |
CERT.EXPR.PARENS The precedence of operators within expressions should be made explicit. |
| EXP02-C(L3) |
MISRA.LOGIC.SIDEEFF Right operand in a logical 'and' or 'or' expression contains side effects |
| EXP08-C(L2) |
ABV.GENERAL Buffer Overflow - Array Index Out of Bounds ABV.GENERAL.MULTIDIMENSION Buffer Overflow - Array Index Out of Bounds ABV.ITERATOR Buffer Overflow - Array Index may be out of Bounds |
| EXP10-C(L2) |
CERT.MULTI.FUNC.ARG.CALLS Do not depend on the order of evaluation of subexpressions or the order in which side effects take place |
| EXP12-C(L3) |
MISRA.FUNC.UNUSEDRET.2012 The return value of a non-void function shall be used. SV.RVT.RETVAL_NOTTESTED Ignored Return Value |
| EXP15-C(L1) |
SEMICOL Suspiciously placed semicolon |
| EXP16-C(L2) |
CWARN.FUNCADDR Function address is used instead of a call to this function CWARN.NULLCHECK.FUNCNAME Function address was directly compared against 0 |
| EXP19-C(L1) |
MISRA.IF.NO_COMPOUND The body of if/else statement is not a compound statement MISRA.STMT.NO_COMPOUND The body of switch, while, do/while or for statement is not a compound statement |
| FIO01-C(L1) |
SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| FIO02-C(L3) |
SV.DLLPRELOAD.NONABSOLUTE.DLL Potential DLL-preload hijack vector SV.TOCTOU.FILE_ACCESS Time of Creation/Time of Use Race condition in File Access |
| FIO22-C(L3) |
RH.LEAK Resource leak |
| FLP07-C(L3) |
CERT.RTN.FLT.CAST.DBL Cast the return value of a function that returns a floating-point type CERT.RTN.FLT.IMPLICIT.CAST.DBL Cast the return value of a function that returns a floating-point type |
| INT02-C(L3) |
MISRA.CAST.INT Non-trivial integer expression is cast to a wider type, or type with a different signedness MISRA.CAST.UNSIGNED_BITS The result of bitwise operation on unsigned char or short is not cast back to original type MISRA.CONV.INT.SIGN Implicit integral conversion changes signedness MISRA.CVALUE.IMPL.CAST The value of an expression implicitly converted to a different type MISRA.UMINUS.UNSIGNED Operand of unary minus is unsigned PRECISION.LOSS Loss of Precision |
| INT04-C(L1) |
SV.TAINTED.ALLOC_SIZE Use of Unvalidated Integer in Memory Allocation SV.TAINTED.BINOP Use of Unvalidated Integer in Binary Operation SV.TAINTED.CALL.BINOP Use of Unvalidated Integer in Binary Operation SV.TAINTED.CALL.INDEX_ACCESS Use of Unvalidated Integer as Array Index by Function Call SV.TAINTED.CALL.LOOP_BOUND Use of Unvalidated Integer in Loop Condition through a Function Call SV.TAINTED.INDEX_ACCESS Use of Unvalidated Integer as Array Index SV.TAINTED.LOOP_BOUND Use of Unvalidated Integer in Loop Condition |
| INT07-C(L1) |
PORTING.SIGNED.CHAR 'char' used without explicitly specifying signedness |
| INT09-C(L3) |
MISRA.ENUM.IMPLICIT.VAL.NON_UNIQUE.2012 Implicit enumerator value is not unique |
| INT12-C(L3) |
MISRA.BITFIELD.TYPE Type of bit-field is not signed/unsigned integer |
| INT13-C(L2) |
MISRA.BITS.NOT_UNSIGNED Operand of bitwise operation is not unsigned integer MISRA.BITS.NOT_UNSIGNED.PREP Operand of bitwise operation is not unsigned integer |
| INT18-C(L1) |
PORTING.CAST.SIZE Expression is cast to a type of potentially different size |
| MEM00-C(L1) |
FNH.MIGHT Freeing Non-Heap Memory - possible FNH.MUST Freeing Non-Heap Memory FUM.GEN.MIGHT Freeing Unallocated Memory - possible FUM.GEN.MUST Freeing Unallocated Memory MLK.MIGHT Memory Leak - possible MLK.MUST Memory Leak MLK.RET.MIGHT Memory Leak - possible MLK.RET.MUST Memory Leak RH.LEAK Resource leak UFM.DEREF.MIGHT Use of free memory (access) - possible UFM.DEREF.MUST Use of Freed Memory by Pointer UFM.FFM.MIGHT Use of free memory (double free) - possible UFM.FFM.MUST Freeing Freed Memory UFM.RETURN.MIGHT Use of freed memory (return) - possible UFM.RETURN.MUST Use of Freed Memory on Return UFM.USE.MIGHT Use of free memory - possible UFM.USE.MUST Use of Freed Memory |
| MEM04-C(L2) |
MISRA.LANG.OBSOLESCENT.REALLOC_ZERO_SIZE.2023 Invoking 'realloc' with a size argument equal to zero is an obsolescent feature |
| MEM05-C(L1) |
MISRA.FUNC.RECUR Recursive function |
| MEM12-C(L3) |
MLK.MIGHT Memory Leak - possible MLK.MUST Memory Leak MLK.RET.MIGHT Memory Leak - possible MLK.RET.MUST Memory Leak RH.LEAK Resource leak |
| MSC01-C(L3) |
CWARN.EMPTY.LABEL Empty label statement INFINITE_LOOP.GLOBAL Infinite loop INFINITE_LOOP.LOCAL Infinite loop INFINITE_LOOP.MACRO Infinite loop LA_UNUSED Label unused MISRA.IF.NO_ELSE A chain of if/else-if statements is not terminated with else or is terminated with an empty else clause MISRA.SWITCH.WELL_FORMED.DEFAULT.2012 Every switch statement shall have a default label. |
| MSC07-C(L3) |
INVARIANT_CONDITION.UNREACH Invariant expression in a condition LA_UNUSED Label unused UNREACH.ENUM Code is unreachable due to the possible value(s) of an enum UNREACH.GEN Unreachable code UNREACH.RETURN Unreachable Void Return UNREACH.SIZEOF Architecture-related unreachable code |
| MSC12-C(L3) |
CWARN.NOEFFECT.SELF_ASSIGN A variable is assigned to self CWARN.NOEFFECT.UCMP.GE Comparison of unsigned value against 0 is always true CWARN.NOEFFECT.UCMP.GE.MACRO Comparison of unsigned value against 0 within a macro is always true CWARN.NOEFFECT.UCMP.LT Comparison of unsigned value against 0 is always false CWARN.NOEFFECT.UCMP.LT.MACRO Comparison of unsigned value against 0 within a macro is always false CWARN.NULLCHECK.FUNCNAME Function address was directly compared against 0 EFFECT Statement has no effect INVARIANT_CONDITION.UNREACH Invariant expression in a condition LA_UNUSED Label unused MISRA.STMT.NO_EFFECT The statement has no side effects, and does not change control flow UNREACH.ENUM Code is unreachable due to the possible value(s) of an enum UNREACH.GEN Unreachable code UNREACH.RETURN Unreachable Void Return UNREACH.SIZEOF Architecture-related unreachable code VA_UNUSED.GEN Value is Never Used after Assignment VA_UNUSED.INIT Value is Never Used after Initialization |
| MSC13-C(L3) |
LV_UNUSED.GEN Local variable unused VA_UNUSED.GEN Value is Never Used after Assignment VA_UNUSED.INIT Value is Never Used after Initialization |
| MSC14-C(L3) |
CERT.ALIGNOF Use of '__alignof__' is a language extension CERT.ANONYMOUS.STRUCT Definition of an anonymous struct object is a language extension CERT.ANONYMOUS.UNION Definition of an anonymous union object is a language extension CERT.ARRAY.LENGTH.ZERO Arrays of length zero are a language extension CERT.BITFIELD.NOT.INT Bit-field not defined as 'int' type is a language extension CERT.BITFIELD.SIGN.MODIFIER Bit-field not defined as signed or unsigned is implementation defined CERT.EMPTY.AGR.INIT Empty aggregate initializers are a language extension CERT.ENUM.LITERAL.TYPE.INT Enumeration literal constant is not of type int CERT.ENUM.TYPE.SPECIFIER Non-standard extended enum type specifier is a language extension CERT.FIXED.MEMORY.ADDRESS Use of '@ address' is a language extension CERT.LITERAL.BINARY Use of binary constant is a language extension CERT.LITERAL.MULTIBYTE.CHAR Assignment of multi-byte character constant is implementation defined CERT.LITERAL.OCTAL Use of octal constant is a language extension CERT.LITERAL.SUFFIX.I64 Use of I64 or UI64 as an integer constant suffix is a language extension CERT.NAME.DOLLAR.CHAR Use '$' of character in object name is not a legal identifier in ISO C CERT.STMT.EXPR Use of a statement expression is a language extension CERT.STR.RANGE.FORMATTER Use of string range formatter is implementation defined CERT.TYPEOF Use of '__typeof__' is a language extension CERT.UNNAMED.MEMBER Definition of an unnamed member in a struct or union is a language extension |
| MSC17-C(L1) |
MISRA.SWITCH.WELL_FORMED.BREAK.2012 An unconditional break statement shall terminate every switch-clause. |
| POS02-C(L2) |
SV.USAGERULES.PERMISSIONS Use of Privilege Elevation |
| POS05-C(L3) |
CERT.CHROOT Use of chroot function CERT.CHROOT.CHDIR Call to 'chroot' function is not followed by call to 'chdir' |
| PRE00-C(L3) |
MISRA.DEFINE.FUNC Function-like macro definition |
| PRE01-C(L1) |
MISRA.DEFINE.NOPARS Macro parameter with no parentheses |
| PRE02-C(L1) |
MISRA.DEFINE.BADEXP Inappropriate macro expansion |
| PRE05-C(L3) |
MISRA.DEFINE.SHARP.ORDER.2012 Unspecified order of evaluation of multiple '#' or '##' |
| PRE06-C(L3) |
MISRA.INCGUARD Include guard is not provided |
| PRE10-C(L1) |
MISRA.DEFINE.BADEXP Inappropriate macro expansion |
| STR02-C(L2) |
NNTS.TAINTED Unvalidated User Input Causing Buffer Overflow - Non-Null Terminated String SV.TAINTED.INJECTION Command Injection |
| STR03-C(L3) |
NNTS.MIGHT Buffer Overflow - Non-null Terminated String NNTS.MUST Buffer Overflow - Non-null Terminated String |
| STR05-C(L3) |
MISRA.STRING_LITERAL.NON_CONST.2012 A string literal shall not be assigned to an object unless the object's type is pointer to const-qualified char |
| WIN00-C(L2) |
SV.DLLPRELOAD.NONABSOLUTE.DLL Potential DLL-preload hijack vector SV.DLLPRELOAD.NONABSOLUTE.EXE Potential process injection vector SV.DLLPRELOAD.SEARCHPATH Do not use SearchPath to find DLLs |
| at the same level of abstraction |
FNH.MIGHT Freeing Non-Heap Memory - possible FNH.MUST Freeing Non-Heap Memory FUM.GEN.MIGHT Freeing Unallocated Memory - possible FUM.GEN.MUST Freeing Unallocated Memory MLK.MIGHT Memory Leak - possible MLK.MUST Memory Leak MLK.RET.MIGHT Memory Leak - possible MLK.RET.MUST Memory Leak RH.LEAK Resource leak UFM.DEREF.MIGHT Use of free memory (access) - possible UFM.DEREF.MUST Use of Freed Memory by Pointer UFM.FFM.MIGHT Use of free memory (double free) - possible UFM.FFM.MUST Freeing Freed Memory UFM.RETURN.MIGHT Use of freed memory (return) - possible UFM.RETURN.MUST Use of Freed Memory on Return UFM.USE.MIGHT Use of free memory - possible UFM.USE.MUST Use of Freed Memory |
| for |
MISRA.IF.NO_COMPOUND The body of if/else statement is not a compound statement MISRA.STMT.NO_COMPOUND The body of switch, while, do/while or for statement is not a compound statement SEMICOL Suspiciously placed semicolon |
| or while statement |
MISRA.IF.NO_COMPOUND The body of if/else statement is not a compound statement MISRA.STMT.NO_COMPOUND The body of switch, while, do/while or for statement is not a compound statement SEMICOL Suspiciously placed semicolon |
"MISRA", "MISRA C" and "MISRA C++" are registered trademarks of The MISRA Consortium Limited.