# Helix QAC GEP/GCS/GRP Report

## Helix QAC GEP/GCS/GRP Report for CERTCCM

#### Note: This report is generated using Helix QAC version: 2020.2, property of Programming Research Limited, a Perforce company.

Project : nucleo/Firmware/nucleo/PRQA/RFAL-ST25R3916
Status at: 31 May, 2024 at 12:53:16
Report script last update: July 6, 2021

## GEP - Guideline Enforcement Plan

This report documents the coverage of CERT conformance. Its notation is derived from MISRA, please refer for details of the following reports (GEP, GRP, GCS, etc.) to this standard.
This section targets to provide an overview of Guidelines Enforcement Plan (GEP).
This document will only focus on STMicroelectronics NFC RF Abstraction Layer (RFAL).
The project has been designed to comply with the standard ISO/IEC 9899:1999 ([C99]).

### 1. Tools version

Component | Version | Target | Options
--- | --- | --- | ---

certccm

1.5.0

C

rcma

2.3.0

C_CPP

qac

9.9.0

C

-d : __schedule_barrier=_ignore_semi

-namelength : 63

-prodoption : df::function_timeout=20000

### 2. Configuration

This section targets to provide the main configuration options used for CERT compliance.
The project complies to [C99],
the variables length has been consequently set to a dedicated value (cf 'namelength' option in table above).
Repository/components:

- MCU target:

RFAL-ST25R3916

- RFAL informations:

Path: rfal

Version: v3.0.0

- Project repositories SHA1:

common: bd63699

nucleo: afd8cc1

rfal: 5b33cb9

### 3. Assistance/Enforcement

Guideline | Category | Description | Assistance/Enforcement Sub Rules
--- | --- | --- | ---

ARR02

Recommendation

Explicitly specify array bounds, even if implicitly defined by an initializer

Qac | Description
--- | ---
qac-0678 | [u] Array element is array of unknown size. Arrays cannot be constructed from incomplete types.
qac-0688 | Array size determined by number of initializers which include concatenated string literals.
qac-3674 | Array size defined implicitly by the number of initializers.
qac-3684 | Array declared with unknown size.

ARR30

Rule

Do not form or use out-of-bounds pointers or array subscripts

Qac | Description
--- | ---
qac-2820 | Constant: Arithmetic operation on NULL pointer.
qac-2821 | Definite: Arithmetic operation on NULL pointer.
qac-2822 | Apparent: Arithmetic operation on NULL pointer.
qac-2823 | Suspicious: Arithmetic operation on NULL pointer.
qac-2840 | Constant: Dereference of an invalid pointer value.
qac-2841 | Definite: Dereference of an invalid pointer value.
qac-2842 | Apparent: Dereference of an invalid pointer value.
qac-2843 | Suspicious: Dereference of an invalid pointer value.
qac-2930 | Constant: Computing an invalid pointer value.
qac-2931 | Definite: Computing an invalid pointer value.
qac-2932 | Apparent: Computing an invalid pointer value.
qac-2933 | Suspicious: Computing an invalid pointer value.
qac-2935 | Constant: Dereference of an invalid char pointer value.
qac-2936 | Definite: Dereference of an invalid char pointer value.
qac-2937 | Apparent: Dereference of an invalid char pointer value.
qac-2938 | Suspicious: Dereference of an invalid char pointer value.
qac-2950 | Constant: Negative value used in array subscript or pointer arithmetic operation.
qac-2951 | Definite: Negative value used in array subscript or pointer arithmetic operation.
qac-2952 | Apparent: Negative value used in array subscript or pointer arithmetic operation.
qac-2953 | Suspicious: Negative value used in array subscript or pointer arithmetic operation.

ARR32

Rule

Ensure size arguments for variable length arrays are in a valid range

Qac | Description
--- | ---
qac-1051 | [C99] A variable length array has been declared.

ARR36

Rule

Do not subtract or compare two pointers that do not refer to the same array

Qac | Description
--- | ---
qac-0487 | [C] If two pointers are subtracted, they must be pointers that address compatible types.
qac-0513 | [C] Relational operator used to compare pointers to incompatible types.
qac-2668 | Subtraction of a pointer to an array and a pointer to a non-array.
qac-2669 | Comparison of a pointer to an array and a pointer to a non-array.
qac-2761 | Definite: Subtracting pointers that address different objects.
qac-2762 | Apparent: Subtracting pointers that address different objects.
qac-2763 | Suspicious: Subtracting pointers that address different objects.
qac-2766 | Definite: Subtracting pointers that address different members of the same object.
qac-2767 | Apparent: Subtracting pointers that address different members of the same object.
qac-2768 | Suspicious: Subtracting pointers that address different members of the same object.
qac-2771 | Definite: Comparing pointers that address different objects.
qac-2772 | Apparent: Comparing pointers that address different objects.
qac-2773 | Suspicious: Comparing pointers that address different objects.

ARR37

Rule

Do not add or subtract an integer to a pointer to a non-array object

Qac | Description
--- | ---
qac-2930 | Constant: Computing an invalid pointer value.
qac-2931 | Definite: Computing an invalid pointer value.
qac-2932 | Apparent: Computing an invalid pointer value.
qac-2933 | Suspicious: Computing an invalid pointer value.

ARR38

Rule

Guarantee that library functions do not form invalid pointers

Qac | Description
--- | ---
qac-2840 | Constant: Dereference of an invalid pointer value.
qac-2841 | Definite: Dereference of an invalid pointer value.
qac-2842 | Apparent: Dereference of an invalid pointer value.
qac-2843 | Suspicious: Dereference of an invalid pointer value.
qac-2845 | Constant: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2846 | Definite: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2847 | Apparent: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2848 | Suspicious: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2935 | Constant: Dereference of an invalid char pointer value.
qac-2936 | Definite: Dereference of an invalid char pointer value.
qac-2937 | Apparent: Dereference of an invalid char pointer value.
qac-2938 | Suspicious: Dereference of an invalid char pointer value.
qac-4880 | Constant: Pointed to object has smaller size than the size_t argument.
qac-4881 | Definite: Pointed to object has smaller size than the size_t argument.
qac-4882 | Apparent: Pointed to object has smaller size than the size_t argument.
qac-4883 | Suspicious: Pointed to object has smaller size than the size_t argument.

ARR39

Rule

Do not add or subtract a scaled integer to a pointer

Qac | Description
--- | ---
qac-4955 | Constant: Adding/subtracting a scaled integer to a pointer.
qac-4956 | Definite: Adding/subtracting a scaled integer to a pointer.
qac-4957 | Apparent: Adding/subtracting a scaled integer to a pointer.

CON30

Rule

Clean up thread-specific storage

Qac | Description
--- | ---
mta-1780 | Memory associated with the TLS key '%1s' is deallocated more than once.
mta-1781 | Memory associated with the TLS key '%1s' may be deallocated more than once.
mta-1782 | Memory associated with the TLS key '%1s' is deallocated in a way that does not match its allocation.
mta-1783 | Memory associated with the TLS key '%1s' is not deallocated.
mta-1784 | The origin of the TLS key '%1s' cannot be identified. Perhaps it should have been passed as a thread parameter?

CON31

Rule

Do not destroy a mutex while it is locked

Qac | Description
--- | ---
qac-4961 | Definite: Attempt to destroy a mutex which is still locked
qac-4962 | Apparent: Attempt to destroy a mutex which is still locked

CON32

Rule

Prevent data races when accessing bit-fields from multiple threads

Qac | Description
--- | ---
mta-1774 | Definite: data race for an object '%1s' which shares its physical storage location with one or more others.
mta-1775 | Apparent: data race for an object '%1s' which shares its physical storage location with one or more others.

CON33

Rule

Avoid race conditions when using library functions

Qac | Description
--- | ---
qac-4976 | Definite: Call to a non-reentrant function outside of a critical section.
qac-4977 | Apparent: Call to a non-reentrant function outside of a critical section.
certccm-5037 | Use of '%1s'.

CON34

Rule

Declare objects shared between threads with appropriate storage durations

Qac | Description
--- | ---
qac-4926 | Definite: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.
qac-4927 | Apparent: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.
qac-4928 | Suspicious: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.

CON35

Rule

Avoid deadlock by locking in a predefined order

Qac | Description
--- | ---
mta-1772 | Mutex '%1s' violates the lock hierarchy, as it is acquired before '%2s' elsewhere %3s% of the time.
mta-1773 | Mutexes '%1s' and '%2s' are not ordered in the lock hierarchy.

CON36

Rule

Wrap functions that can spuriously wake up in a loop

Qac | Description
--- | ---
qac-2027 | This function can wake spuriously, but does not appear to be wrapped in a loop.

CON37

Rule

Do not call signal() in a multithreaded program

Qac | Description
--- | ---
certccm-5021 | '%s' is being used.

CON38

Rule

Preserve thread safety and liveness when using condition variables

Qac | Description
--- | ---
mta-1778 | Condition variable '%1s' is signaled and used with multiple wait operations.
mta-1779 | Condition variable '%1s' is signaled and used with a re-entered wait operation.

CON39

Rule

Do not join or detach a thread that was previously joined or detached

Qac | Description
--- | ---
mta-1776 | Thread '%1s' is made unjoinable multiple times.

CON40

Rule

Do not refer to an atomic variable twice in an expression

Qac | Description
--- | ---
qac-1114 | This atomic variable is referenced directly twice in the same expression.
qac-1115 | This atomic lvalue appears to be referenced twice in the same expression.
qac-1116 | This atomic variable appears to be updated non-atomically.

CON41

Rule

Wrap functions that can fail spuriously in a loop

Qac | Description
--- | ---
qac-2026 | This function can fail spuriously, but does not appear to be wrapped in a loop.

CON43

Rule

Do not allow data races in multithreaded code

Qac | Description
--- | ---
mta-1765 | Definite: data race for object '%1s'.
mta-1766 | Apparent: data race for object '%1s'.
mta-1770 | Definite: data race for a volatile object '%1s'.
mta-1771 | Definite: data race for a mutable object '%1s'.

DCL00

Recommendation

Const-qualify immutable objects

Qac | Description
--- | ---
qac-3204 | The variable '%s' is only set once and so it could be declared with the 'const' qualifier.
qac-3227 | The parameter '%s' is never modified and so it could be declared with the 'const' qualifier.
qac-3232 | File scope static, '%s', is never modified. It could be declared const.
qac-3673 | The object addressed by the pointer parameter '%1s' is not modified and so the pointer could be of type 'pointer to const'.
qac-3677 | The elements of the array parameter '%1s' are not modified and so they could be qualified as 'const'.

DCL01

Recommendation

Do not reuse variable names in subscopes

Qac | Description
--- | ---
qac-0795 | Identifier matches other identifier(s) (e.g. '%1s') in an outer scope within the specified number of significant characters.
qac-0796 | Identifier matches other identifier(s) (e.g. '%1s') in an outer scope within the ISO:C99 limit of 63 significant characters
qac-2547 | This declaration of tag '%s' hides a more global declaration.
qac-3334 | This declaration of '%1s' hides a more global declaration.

DCL05

Recommendation

Use typedefs of non-pointer types only

Qac | Description
--- | ---
certccm-5004 | This typedef is applied to a pointer type.

DCL06

Recommendation

Use meaningful symbolic constants to represent literal values

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3121 | Hard-coded 'magic' floating constant, '%1s'.
qac-3122 | Hard-coded 'magic' string literal, %1s.
qac-3123 | Hard coded 'magic' character constant, %1s.
qac-3131 | Hard coded 'magic' number, '%1s', used to define the size of a bit-field.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

DCL07

Recommendation

Include the appropriate type information in function declarators

Qac | Description
--- | ---
qac-1304 | Old style definition of function '%1s()' is not portable to C++.
qac-2050 | The 'int' type specifier has been omitted from a function declaration.
qac-3331 | The definition for identifier '%s' with external linkage conflicts with a previous declaration in the same scope.
qac-3335 | No function declaration. Implicit declaration inserted: 'extern int %s();'.
qac-3408 | '%1s' has external linkage and is being defined without any previous declaration.
qac-3450 | Function '%s', with internal linkage, is being defined without a previous declaration.

DCL10

Recommendation

Maintain the contract between the writer and caller of variadic functions

Qac | Description
--- | ---
qac-0184 | [U] Insufficient arguments to satisfy conversion specifier, number %1s.
qac-0185 | [U] Call contains more arguments than conversion specifiers.

DCL11

Recommendation

Understand the type issues associated with variadic functions

Qac | Description
--- | ---
qac-0179 | [U] Argument type does not match conversion specifier number %1s.
qac-0184 | [U] Insufficient arguments to satisfy conversion specifier, number %1s.
qac-0185 | [U] Call contains more arguments than conversion specifiers.
qac-0186 | [U] A call to this function must include at least one argument.
qac-0190 | [U] Using unsupported conversion specifier number %1s.
qac-0191 | [U] Unknown length modifier used with 'd/i/n' conversion specifier, number %1s.
qac-0192 | [U] Unknown length modifier used with 'o' conversion specifier, number %1s.
qac-0193 | [U] Unknown length modifier used with 'u' conversion specifier, number %1s.
qac-0194 | [U] Unknown length modifier used with 'x/X' conversion specifier, number %1s.
qac-0195 | [U] Unknown length modifier used with 'e/E/f/F/g/G' conversion specifier, number %1s.
qac-0196 | [U] Unknown length modifier used with 's' conversion specifier, number %1s.
qac-0197 | [U] Unknown length modifier used with 'p' conversion specifier, number %1s.
qac-0198 | [U] Unknown length modifier used with '%%' conversion specifier, number %1s.
qac-0199 | [U] Unknown length modifier used with '[' conversion specifier, number %1s.
qac-0200 | [U] Unknown length modifier used with 'c' conversion specifier, number %1s.
qac-0201 | [U] Incomplete conversion specifier, number %1s.
qac-0206 | [U] Argument type does not match conversion specifier number %1s.
qac-0207 | [U] 'scanf' expects address of objects being stored into.
qac-0208 | [U] Same character occurs in scanset more than once.

DCL13

Recommendation

Declare function parameters that are pointers to values not changed by the function as const

Qac | Description
--- | ---
qac-0431 | [C] Function argument points to a more heavily qualified type.
qac-3673 | The object addressed by the pointer parameter '%1s' is not modified and so the pointer could be of type 'pointer to const'.
qac-3677 | The elements of the array parameter '%1s' are not modified and so they could be qualified as 'const'.

DCL15

Recommendation

Declare file-scope objects or functions that do not need external linkage as static

Qac | Description
--- | ---
rcma-1504 | The object '%1s' is only referenced in the translation unit where it is defined.
rcma-1531 | The object '%1s' is referenced in only one translation unit - but not the one in which it is defined.

DCL16

Recommendation

Use 'L', not 'l', to indicate a long value

Qac | Description
--- | ---
qac-1280 | A lowercase letter L (l) has been used in an integer or floating suffix.

DCL18

Recommendation

Do not begin integer constants with 0 when specifying a decimal value

Qac | Description
--- | ---
qac-0339 | Octal constant used.
qac-1272 | Redundant leading zeroes on a numeric constant.

DCL19

Recommendation

Minimize the scope of variables and functions

Qac | Description
--- | ---
rcma-1504 | The object '%1s' is only referenced in the translation unit where it is defined.
rcma-1505 | The function '%1s' is only referenced in the translation unit where it is defined.
rcma-1531 | The object '%1s' is referenced in only one translation unit - but not the one in which it is defined.
rcma-1532 | The function '%1s' is only referenced in one translation unit - but not the one in which it is defined.
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
qac-3218 | File scope static, '%1s', is only accessed in one function.

DCL20

Recommendation

Explicitly specify void when a function accepts no arguments

Qac | Description
--- | ---
qac-3001 | Function has been declared with an empty parameter list.
qac-3007 | "void" has been omitted when defining a function with no parameters.

DCL21

Recommendation

Understand the storage of compound literals

Qac | Description
--- | ---
qac-1054 | [C99] A compound literal has been used.
qac-3217 | Address of automatic object exported to a pointer with linkage or wider scope.

DCL23

Recommendation

Guarantee that mutually visible identifiers are unique

Qac | Description
--- | ---
qac-0627 | [C] '%s' has different type to previous declaration in the same scope.
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0777 | [U] External identifier does not differ from other identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.
qac-0779 | [U] Identifier does not differ from other identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0789 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 63 characters - program does not conform strictly to ISO:C99.
qac-0791 | [U] Macro identifier does not differ from other macro identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0793 | [L] Macro identifier matches other macro identifier(s) (e.g. '%1s') in first 63 characters - program does not conform strictly to ISO:C99.

DCL30

Rule

Declare objects with appropriate storage durations

Qac | Description
--- | ---
qac-3217 | Address of automatic object exported to a pointer with linkage or wider scope.
qac-3225 | Address of automatic object exported using a function parameter.
qac-3230 | Address of automatic object assigned to local pointer with static storage duration.
qac-4140 | Address of automatic object exported in function return value.

DCL31

Rule

Declare identifiers before using them

Qac | Description
--- | ---
qac-0434 | [S] The identifier '%s' has not been declared.
qac-2050 | The 'int' type specifier has been omitted from a function declaration.
qac-2051 | The 'int' type specifier has been omitted from an object declaration.
qac-3335 | No function declaration. Implicit declaration inserted: 'extern int %s();'.

DCL36

Rule

Do not declare an identifier with conflicting linkage classifications

Qac | Description
--- | ---
qac-0625 | [U] '%s' has been declared with both internal and external linkage - the behaviour is undefined.

DCL37

Rule

Do not declare or define a reserved identifier

Qac | Description
--- | ---
qac-0602 | [U] The identifier '%s' is reserved for use by the library.
qac-0603 | [U] The macro identifier '%s' is reserved.
qac-4600 | The macro '%1s' is also defined in '<%2s>'.
qac-4601 | The macro '%1s' is the name of an identifier in '<%2s>'.
qac-4602 | The identifier '%1s' is declared as a macro in '<%2s>'.
qac-4603 | The object/function '%1s'is being defined with the same name as an ordinary identifier defined in '<%2s>'.
qac-4604 | The object/function '%1s' is being declared with the same name as an ordinary identifier defined in '<%2s>'.
qac-4605 | The typedef '%1s' is also defined in '<%2s>'.
qac-4606 | The typedef '%1s' has the same name as another ordinary identifier in '<%2s>'.
qac-4607 | The enum constant '%1s' has the same name as another ordinary identifier in '<%2s>'.
qac-4608 | The tag '%1s' is also defined in '<%2s>'.
qac-4620 | The macro '%1s' may also be defined as a macro in '<%2s>'.
qac-4621 | The macro '%1s' may also be defined as a typedef in '<%2s>'.
qac-4622 | The identifier '%1s' may be defined as a macro in '<%2s>'.
qac-4623 | The typedef '%1s' may also be defined in '<%2s>'.
qac-4624 | The ordinary identifier '%1s' may be defined as a typedef in '<%2s>'.
qac-4640 | The macro '%1s' could conflict in the future with the name of a macro in '<%2s>'.
qac-4641 | The identifier '%1s' could conflict in the future with the name of a macro in '<%2s>'.
qac-4642 | The macro '%1s' could conflict in the future with the name of a function in '<%2s>'.
qac-4643 | The identifier '%1s' could conflict in the future with the name of a function in '<%2s>'.
qac-4644 | The macro '%1s' could conflict in the future with the name of a typedef in '<%2s>'.
qac-4645 | The identifier '%1s' could conflict in the future with the name of a typedef in '<%2s>'.

DCL38

Rule

Use the correct syntax when declaring a flexible array member

Qac | Description
--- | ---
qac-1037 | [E] Arrays of length zero are a language extension.
qac-1039 | [E] Treating array of length one as potentially flexible member.

DCL39

Rule

Avoid information leakage when passing a structure across a trust boundary

Qac | Description
--- | ---
qac-4941 | Definite: Passing a padded structure from a trusted boundary to another domain.
qac-4942 | Apparent: Passing a padded structure from a trusted boundary to another domain.
qac-4943 | Suspicious: Passing a padded structure from a trusted boundary to another domain.

DCL40

Rule

Do not create incompatible declarations of the same function or object

Qac | Description
--- | ---
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.
qac-0779 | [U] Identifier does not differ from other identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0789 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 63 characters - program does not conform strictly to ISO:C99.
rcma-1510 | '%1s' has external linkage and has incompatible declarations.

DCL41

Rule

Do not declare variables inside a switch statement before the first case label

Qac | Description
--- | ---
qac-2008 | Code statements precede the first label in this 'switch' construct.
qac-2882 | This 'switch' statement will bypass the initialization of local variables.
qac-3234 | Declarations precede the first label in this 'switch' construct.

ENV03

Recommendation

Sanitize the environment when invoking external programs

Qac | Description
--- | ---
certccm-5017 | '%s' is being used.

ENV30

Rule

Do not modify the object referenced by the return value of certain functions

Qac | Description
--- | ---
qac-1492 | The result of library function '%1s' is used to modify the referenced object.
qac-1493 | The result of library function '%1s' is used as a pointer to a modifiable object.
qac-1494 | The result of library function '%1s' might be modified.
qac-4751 | Definite: Modifying an object that is referenced by the return value of a library function.
qac-4752 | Apparent: Modifying an object that is referenced by the return value of a library function.
qac-4753 | Suspicious: Modifying an object that is referenced by the return value of a library function.

ENV31

Rule

Do not rely on an environment pointer following an operation that may invalidate it

Qac | Description
--- | ---
qac-4991 | Definite: Using an invalidated value '%s' of the environment pointer passed as the third argument to main.
qac-4992 | Apparent: Using an invalidated value '%s' of the environment pointer passed as the third argument to main.
qac-4993 | Suspicious: Using an invalidated value '%s' of the environment pointer passed as the third argument to main.

ENV32

Rule

All exit handlers must return normally

Qac | Description
--- | ---
qac-4856 | Definite: Atexit handler does not return normally.
qac-4857 | Apparent: Atexit handler does not return normally.
qac-4858 | Suspicious: Atexit handler does not return normally.

ENV33

Rule

Do not call system()

Qac | Description
--- | ---
certccm-5018 | '%s' is being used.

ENV34

Rule

Do not store pointers returned by certain functions

Qac | Description
--- | ---
qac-2681 | Definite: Using an invalidated value '%s' returned from a Standard Library function.
qac-2682 | Apparent: Using an invalidated value '%s' returned from a Standard Library function.
qac-2683 | Suspicious: Using an invalidated value '%s' returned from a Standard Library function.

ERR30

Rule

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

Qac | Description
--- | ---
qac-2500 | Call to '%s' is not immediately preceded by the zero-ing of 'errno'.
qac-2501 | Call to '%s' is not immediately followed by the testing of 'errno'.
qac-2502 | Zero-ing of 'errno' is not immediately followed by a call to an 'errno' setting function.
qac-2503 | Testing of 'errno' is not immediately preceded by a call to an 'errno' setting function.

ERR32

Rule

Do not rely on indeterminate values of errno

Qac | Description
--- | ---
qac-2031 | Signal handler '%1s' accesses errno.
qac-4781 | Definite: Signal handler causes the value of errno to be indeterminate.
qac-4782 | Apparent: Signal handler causes the value of errno to be indeterminate.
qac-4783 | Suspicious: Signal handler causes the value of errno to be indeterminate.

ERR33

Rule

Detect and handle standard library errors

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

ERR34

Rule

Detect errors when converting a string to a number

Qac | Description
--- | ---
certccm-5030 | '%s' is being used.

EXP00

Recommendation

Use parentheses for precedence of operation

Qac | Description
--- | ---
qac-3389 | Extra parentheses recommended to clarify the ordering of a % operator and another arithmetic operator (* / % + -).
qac-3390 | Expression is equivalent to: "%s"
qac-3391 | Extra parentheses recommended. A conditional operation is the operand of another conditional operator.
qac-3392 | Extra parentheses recommended. A shift, relational or equality operation is the operand of a second identical operator.
qac-3393 | Extra parentheses recommended. An arithmetic operation (* / + -) is the operand of a different operator with the same precedence.
qac-3394 | Extra parentheses recommended. A shift, relational or equality operation is the operand of a different operator with the same precedence.
qac-3395 | Extra parentheses recommended. A * or / operation is the operand of a + or - operator.
qac-3396 | Extra parentheses recommended. A binary operation is the operand of a conditional operator.
qac-3397 | Extra parentheses recommended. A binary operation is the operand of a binary operator with different precedence.
qac-3398 | Extra parentheses recommended. A function call, array subscript, or member operation is the operand of a logical && or ||.
qac-3399 | Extra parentheses recommended. A unary operation is the operand of a logical && or ||.
qac-3400 | Extra parentheses recommended. A binary operation is the operand of a logical && or ||.

EXP02

Recommendation

Be aware of the short-circuit behavior of the logical AND and OR operators

Qac | Description
--- | ---
qac-3415 | Right hand operand of '&&' or '||' is an expression with persistent side effects.

EXP03

Recommendation

Do not assume the size of a structure is the sum of the sizes of its members

Qac | Description
--- | ---
qac-0697 | The size of the allocated memory block is not an integral multiple of the size of the object type addressed by the pointer cast.

EXP05

Recommendation

Do not cast away a const qualification

Qac | Description
--- | ---
qac-0311 | Dangerous pointer cast results in loss of const qualification.
qac-0431 | [C] Function argument points to a more heavily qualified type.

EXP07

Recommendation

Do not diminish the benefits of constants by assuming their values in expressions

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3121 | Hard-coded 'magic' floating constant, '%1s'.
qac-3122 | Hard-coded 'magic' string literal, %1s.
qac-3123 | Hard coded 'magic' character constant, %1s.
qac-3131 | Hard coded 'magic' number, '%1s', used to define the size of a bit-field.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

EXP08

Recommendation

Ensure pointer arithmetic is used correctly

Qac | Description
--- | ---
qac-0488 | Performing pointer arithmetic.
qac-2930 | Constant: Computing an invalid pointer value.
qac-2931 | Definite: Computing an invalid pointer value.
qac-2932 | Apparent: Computing an invalid pointer value.
qac-2933 | Suspicious: Computing an invalid pointer value.

EXP10

Recommendation

Do not depend on the order of evaluation of subexpressions or the order in which side effects take place

Qac | Description
--- | ---
qac-0400 | [U] '%1s' is modified more than once between sequence points - evaluation order unspecified.
qac-0401 | [U] '%1s' may be modified more than once between sequence points - evaluation order unspecified.
qac-0402 | [U] '%1s' is modified and accessed between sequence points - evaluation order unspecified.
qac-0403 | [U] '%1s' may be modified and accessed between sequence points - evaluation order unspecified.
qac-0404 | [U] More than one read access to volatile objects between sequence points.
qac-0405 | [U] More than one modification of volatile objects between sequence points.
qac-3226 | The result of an assignment is being used in an arithmetic operation or another assigning operation.
qac-3326 | The result of an assignment is being used in a logical operation.

EXP11

Recommendation

Do not make assumptions regarding the layout of structures with bit-fields

Qac | Description
--- | ---
qac-0310 | Casting to different object pointer type.
qac-0751 | Casting to char pointer type.

EXP12

Recommendation

Do not ignore values returned by functions

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

EXP13

Recommendation

Treat relational and equality operators as if they were nonassociative

Qac | Description
--- | ---
qac-3392 | Extra parentheses recommended. A shift, relational or equality operation is the operand of a second identical operator.
qac-3401 | Possible precedence confusion: extra parentheses are recommended here.
qac-4111 | Right hand operand of relational operator is a 'Boolean' expression.
qac-4112 | Left hand operand of relational operator is a 'Boolean' expression.
qac-4113 | Both operands of relational operator are 'Boolean' expressions.

EXP15

Recommendation

Do not place a semicolon on the same line as an if, for, or while statement

Qac | Description
--- | ---
qac-3109 | Null statement follows other code on the same line.

EXP16

Recommendation

Do not compare function pointers to constant values

Qac | Description
--- | ---
qac-0428 | Function identifier is not followed by () but a function call may be intended.
qac-3004 | This integral constant expression is being interpreted as a null pointer constant.
qac-3344 | Controlling expression is not an 'essentially Boolean' expression.

EXP19

Recommendation

Use braces for the body of an if, for, or while statement

Qac | Description
--- | ---
qac-2212 | Body of control statement is not enclosed within braces.

EXP20

Recommendation

Perform explicit tests to determine success, true and false, and equality

Qac | Description
--- | ---
qac-3344 | Controlling expression is not an 'essentially Boolean' expression.
qac-4116 | Operand of logical ! operator is not an 'essentially Boolean' expression.

EXP30

Rule

Do not depend on the order of evaluation for side effects

Qac | Description
--- | ---
qac-0400 | [U] '%1s' is modified more than once between sequence points - evaluation order unspecified.
qac-0401 | [U] '%1s' may be modified more than once between sequence points - evaluation order unspecified.
qac-0402 | [U] '%1s' is modified and accessed between sequence points - evaluation order unspecified.
qac-0403 | [U] '%1s' may be modified and accessed between sequence points - evaluation order unspecified.
qac-0404 | [U] More than one read access to volatile objects between sequence points.
qac-0405 | [U] More than one modification of volatile objects between sequence points.

EXP32

Rule

Do not access a volatile object through a nonvolatile reference

Qac | Description
--- | ---
qac-0312 | Dangerous pointer cast results in loss of volatile qualification.
qac-0562 | [C] Right operand of assignment points to a more heavily qualified type.
qac-0563 | [C] Right operand of assignment is not of compatible pointer type.
qac-0673 | [C] Initializer points to a more heavily qualified type.
qac-0674 | [C] Initializer for pointer is of incompatible type.

EXP33

Rule

Do not read uninitialized memory

Qac | Description
--- | ---
qac-2726 | Definite: Use of uninitialized resource.
qac-2727 | Apparent: Use of uninitialized resource.
qac-2728 | Suspicious: Use of uninitialized resource.
qac-2961 | Definite: Using value of uninitialized automatic object '%s'.
qac-2962 | Apparent: Using value of uninitialized automatic object '%s'.
qac-2963 | Suspicious: Using value of uninitialized automatic object '%s'.
qac-2966 | Definite: Some members of object '%s' are uninitialized.
qac-2967 | Apparent: Some members of object '%s' are uninitialized.
qac-2968 | Suspicious: Some members of object '%s' are uninitialized.
qac-2971 | Definite: Passing address of uninitialized object '%s' to a function parameter declared as a pointer to const.
qac-2972 | Apparent: Passing address of uninitialized object '%s' to a function parameter declared as a pointer to const.
qac-2973 | Suspicious: Passing address of uninitialized object '%s' to a function parameter declared as a pointer to const.
qac-2976 | Definite: Passing address of partially initialized object '%s' to a function parameter declared as a pointer to const.
qac-2977 | Apparent: Passing address of partially initialized object '%s' to a function parameter declared as a pointer to const.
qac-2978 | Suspicious: Passing address of partially initialized object '%s' to a function parameter declared as a pointer to const.

EXP34

Rule

Do not dereference null pointers

Qac | Description
--- | ---
qac-2810 | Constant: Dereference of NULL pointer.
qac-2811 | Definite: Dereference of NULL pointer.
qac-2812 | Apparent: Dereference of NULL pointer.
qac-2813 | Suspicious: Dereference of NULL pointer.

EXP35

Rule

Do not modify objects with temporary lifetime

Qac | Description
--- | ---
qac-0450 | [U] Passing an array with temporary lifetime as a function parameter.
qac-0455 | [U] Passing an array with temporary lifetime as a constant function parameter.
qac-0459 | [U] Modifying the contents of an array with temporary lifetime.
qac-0464 | [U] Storing a pointer to an array with temporary lifetime.
qac-0465 | [U] Returning a pointer to an array with temporary lifetime.

EXP36

Rule

Do not cast pointers into more strictly aligned pointer types

Qac | Description
--- | ---
qac-0326 | [I] Cast between a pointer to void and an integral type.
qac-3305 | Pointer cast to stricter alignment.

EXP37

Rule

Call functions with the correct number and type of arguments

Qac | Description
--- | ---
qac-1331 | Type or number of arguments doesn't match previous use of the function.
qac-1332 | Type or number of arguments doesn't match prototype found later.
qac-1333 | Type or number of arguments doesn't match function definition found later.
qac-3002 | Defining '%1s()' with an identifier list and separate parameter declarations is an obsolescent feature.
qac-3320 | Type of argument no. %s differs from its type in definition of function.
qac-3335 | No function declaration. Implicit declaration inserted: 'extern int %s();'.

EXP39

Rule

Do not access a variable through a pointer of an incompatible type

Qac | Description
--- | ---
qac-0310 | Casting to different object pointer type.
qac-0751 | Casting to char pointer type.
qac-3305 | Pointer cast to stricter alignment.

EXP40

Rule

Do not modify constant objects

Qac | Description
--- | ---
qac-0563 | [C] Right operand of assignment is not of compatible pointer type.

EXP42

Rule

Do not compare padding data

Qac | Description
--- | ---
qac-4726 | Definite: Comparison of padding bits that are not part of the object representation.
qac-4727 | Apparent: Comparison of padding bits that are not part of the object representation.
qac-4728 | Suspicious: Comparison of padding bits that are not part of the object representation.
qac-4729 | Possible: Comparison of padding bits that are not part of the object representation.

EXP43

Rule

Avoid undefined behavior when using restrict-qualified pointers

Qac | Description
--- | ---
qac-1057 | [C99] The keyword 'restrict' has been used.

EXP44

Rule

Do not rely on side effects in operands to sizeof, _Alignof, or _Generic

Qac | Description
--- | ---
qac-3307 | The operand of 'sizeof' is an expression with implied side effects, but they will not be evaluated.

EXP45

Rule

Do not perform assignments in selection statements

Qac | Description
--- | ---
qac-3314 | This controlling expression is an assignment.
qac-3326 | The result of an assignment is being used in a logical operation.
qac-3344 | Controlling expression is not an 'essentially Boolean' expression.
qac-3416 | Logical operation performed on expression with persistent side effects.

EXP46

Rule

Do not use a bitwise operator with a Boolean-like operand

Qac | Description
--- | ---
qac-3344 | Controlling expression is not an 'essentially Boolean' expression.
qac-4502 | An expression of 'essentially Boolean' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).

EXP47

Rule

Do not call va_arg with an argument of the incorrect type

Qac | Description
--- | ---
qac-4901 | Definite: Invalid call to va_arg.
qac-4902 | Apparent: Invalid call to va_arg.
qac-4903 | Suspicious: Invalid call to va_arg.
qac-4904 | Possible: Invalid call to va_arg.

FIO01

Recommendation

Be careful using functions that use file names for identification

Qac | Description
--- | ---
certccm-5011 | '%s' is being used.

FIO03

Recommendation

Do not make assumptions about fopen() and file creation

Qac | Description
--- | ---
certccm-5012 | '%s' is being used.

FIO06

Recommendation

Create files with appropriate access permissions

Qac | Description
--- | ---
certccm-5013 | '%s' is being used.

FIO08

Recommendation

Take care when calling remove() on an open file

Qac | Description
--- | ---
certccm-5014 | '%s' is being used.

FIO10

Recommendation

Take care when using the rename() function

Qac | Description
--- | ---
certccm-5015 | '%s' is being used.

FIO21

Recommendation

Do not create temporary files in shared directories

Qac | Description
--- | ---
certccm-5016 | '%s' is being used.

FIO30

Rule

Exclude user input from format strings

Qac | Description
--- | ---
qac-4916 | Definite: Using a tainted variable as format string.
qac-4917 | Apparent: Using a tainted variable as format string.
qac-4918 | Suspicious: Using a tainted variable as format string.

FIO32

Rule

Do not perform operations on devices that are only appropriate for files

Qac | Description
--- | ---
qac-4921 | Definite: Using a tainted variable as a device name when opening a device that could be a file.
qac-4922 | Apparent: Using a tainted variable as a device name when opening a device that could be a file.
qac-4923 | Suspicious: Using a tainted variable as a device name when opening a device that could be a file.

FIO34

Rule

Distinguish between characters read from a file and EOF or WEOF

Qac | Description
--- | ---
qac-2676 | Definite: The value originating from an EOF returning function was modified before being compared with macro EOF.
qac-2678 | Suspicious: The value originating from an EOF returning function was modified before being compared with macro EOF.

FIO37

Rule

Do not assume that fgets() or fgetws() returns a nonempty string when successful

Qac | Description
--- | ---
qac-4911 | Definite: Assuming that fgets or fgetws returned a non empty string.
qac-4912 | Apparent: Assuming that fgets or fgetws returned a non empty string.
qac-4913 | Suspicious: Assuming that fgets or fgetws returned a non empty string.

FIO38

Rule

Do not copy a FILE object

Qac | Description
--- | ---
qac-1485 | A pointer to a FILE object is dereferenced.
certccm-5028 | Copy of a FILE object.

FIO39

Rule

Do not alternately input and output from a stream without an intervening flush or positioning call

Qac | Description
--- | ---
qac-4711 | Definite: Alternating I/O operations on a file stream found without an intervening positioning call or EOF.
qac-4712 | Apparent: Alternating I/O operations on a file stream found without an intervening positioning call or EOF.
qac-4713 | Suspicious: Alternating I/O operations on a file stream found without an intervening positioning call or EOF.

FIO40

Rule

Reset strings on fgets() or fgetws() failure

Qac | Description
--- | ---
qac-4861 | Definite: Using an array containing indeterminate values after a call to fgets or fgetws.
qac-4862 | Apparent: Using an array containing indeterminate values after a call to fgets or fgetws.
qac-4863 | Suspicious: Using an array containing indeterminate values after a call to fgets or fgetws.

FIO41

Rule

Do not call getc(), putc(), getwc(), or putwc() with a stream argument that has side effects

Qac | Description
--- | ---
certccm-5036 | '%s' is being used.

FIO42

Rule

Close files when they are no longer needed

Qac | Description
--- | ---
qac-2701 | Definite: Opened file is not closed.
qac-2702 | Apparent: Opened file is not closed.
qac-2703 | Suspicious: Opened file is not closed.

FIO44

Rule

Only use values for fsetpos() that are returned from fgetpos()

Qac | Description
--- | ---
qac-4841 | Definite: Passing a file position argument to fsetpos() not obtained from fgetpos().
qac-4842 | Apparent: Passing a file position argument to fsetpos() not obtained from fgetpos().
qac-4843 | Suspicious: Passing a file position argument to fsetpos() not obtained from fgetpos().

FIO45

Rule

Avoid TOCTOU race conditions while accessing files

Qac | Description
--- | ---
qac-4851 | Definite: File access time-of-check time-of-use race condition.
qac-4852 | Apparent: File access time-of-check time-of-use race condition.
qac-4853 | Suspicious: File access time-of-check time-of-use race condition.

FIO46

Rule

Do not access a closed file

Qac | Description
--- | ---
qac-2696 | Definite: Attempt to access a file which has been closed.
qac-2697 | Apparent: Attempt to access a file which has been closed.
qac-2698 | Suspicious: Attempt to access a file which has been closed.

FIO47

Rule

Use valid format strings

Qac | Description
--- | ---
qac-0161 | [U] Unknown length modifier used with 'i' or 'd' conversion specifier, number %1s.
qac-0162 | [U] Unknown length modifier used with 'o' conversion specifier, number %1s.
qac-0163 | [U] Unknown length modifier used with 'u' conversion specifier, number %1s.
qac-0164 | [U] Unknown length modifier used with 'x' conversion specifier, number %1s.
qac-0165 | [U] Unknown length modifier used with 'X' conversion specifier, number %1s.
qac-0166 | [U] Unknown length modifier used with 'f' conversion specifier, number %1s.
qac-0167 | [U] Unknown length modifier used with 'e' conversion specifier, number %1s.
qac-0168 | [U] Unknown length modifier used with 'E' conversion specifier, number %1s.
qac-0169 | [U] Unknown length modifier used with 'g' conversion specifier, number %1s.
qac-0170 | [U] Unknown length modifier used with 'G' conversion specifier, number %1s.
qac-0171 | [U] Unknown length modifier used with 'c' conversion specifier, number %1s.
qac-0172 | [U] Unknown length modifier used with '%%' conversion specifier, number %1s.
qac-0173 | [U] Unknown length modifier used with 's' conversion specifier, number %1s.
qac-0174 | [U] Unknown length modifier used with 'n' conversion specifier, number %1s.
qac-0175 | [U] Unknown length modifier used with 'p' conversion specifier, number %1s.
qac-0176 | [U] Incomplete conversion specifier, number %1s.
qac-0177 | [U] Field width of format conversion specifier exceeds 509 characters.
qac-0178 | [U] Precision of format conversion specifier exceeds 509 characters.
qac-0179 | [U] Argument type does not match conversion specifier number %1s.
qac-0180 | [C99] Use of ll for conversion specifier.
qac-0184 | [U] Insufficient arguments to satisfy conversion specifier, number %1s.
qac-0185 | [U] Call contains more arguments than conversion specifiers.
qac-0190 | [U] Using unsupported conversion specifier number %1s.
qac-0191 | [U] Unknown length modifier used with 'd/i/n' conversion specifier, number %1s.
qac-0192 | [U] Unknown length modifier used with 'o' conversion specifier, number %1s.
qac-0193 | [U] Unknown length modifier used with 'u' conversion specifier, number %1s.
qac-0194 | [U] Unknown length modifier used with 'x/X' conversion specifier, number %1s.
qac-0195 | [U] Unknown length modifier used with 'e/E/f/F/g/G' conversion specifier, number %1s.
qac-0196 | [U] Unknown length modifier used with 's' conversion specifier, number %1s.
qac-0197 | [U] Unknown length modifier used with 'p' conversion specifier, number %1s.
qac-0198 | [U] Unknown length modifier used with '%%' conversion specifier, number %1s.
qac-0199 | [U] Unknown length modifier used with '[' conversion specifier, number %1s.
qac-0200 | [U] Unknown length modifier used with 'c' conversion specifier, number %1s.
qac-0201 | [U] Incomplete conversion specifier, number %1s.
qac-0202 | [I] '-' character in '[]' conversion specification is implementation defined.
qac-0204 | [U] Field width of format conversion specifier exceeds 509 characters.
qac-0206 | [U] Argument type does not match conversion specifier number %1s.
qac-0209 | [U] Using a non-constant format string.

FLP02

Recommendation

Avoid using floating-point numbers when precise computation is needed

Qac | Description
--- | ---
qac-0790 | This translation unit makes use of floating types.

FLP06

Recommendation

Convert integers to floating point for floating point operations

Qac | Description
--- | ---
qac-4117 | Result of integer division operation implicitly converted to a floating type.
qac-4118 | Result of integer division operation cast to a floating type.

FLP30

Rule

Do not use floating-point variables as loop counters

Qac | Description
--- | ---
qac-3339 | Floating point variable used as 'while' loop control variable.
qac-3340 | Floating point variable used as 'for' loop control variable.
qac-3342 | Controlling expression of 'for' loop is a floating point comparison.

FLP32

Rule

Prevent or detect domain and range errors in math functions

Qac | Description
--- | ---
certccm-5025 | '%s' is being used.

FLP34

Rule

Ensure that floating-point conversions are within range of the new type

Qac | Description
--- | ---
qac-4450 | An expression of 'essentially floating' type (%1s) is being converted to Boolean type, '%2s' on assignment.
qac-4451 | An expression of 'essentially floating' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4452 | An expression of 'essentially floating' type (%1s) is being converted to enum type, '%2s' on assignment.
qac-4453 | An expression of 'essentially floating' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4454 | An expression of 'essentially floating' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4462 | A non-constant expression of 'essentially floating' type (%1s) is being converted to narrower floating type, '%2s' on assignment.
qac-4465 | A constant expression of 'essentially floating' type (%1s) is being converted to narrower floating type, '%2s' on assignment.

FLP36

Rule

Preserve precision when converting integral values to floating-point type

Qac | Description
--- | ---
qac-1260 | Integer constant implicitly converted to a floating type.
qac-1263 | Floating constant causes implicit conversion of other (integral) operand.
qac-1298 | An integer constant of 'essentially signed' type is being converted to floating type on assignment.
qac-1299 | An integer constant of 'essentially unsigned' type is being converted to floating type on assignment.
qac-1800 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this arithmetic operation.
qac-1802 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this relational operation.
qac-1803 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this equality operation.
qac-1804 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this conditional operation.
qac-4117 | Result of integer division operation implicitly converted to a floating type.
qac-4435 | A non-constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4437 | A constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4445 | An expression of 'essentially unsigned' type (%1s) is being converted to floating type, '%2s' on assignment.

FLP37

Rule

Do not use object representations to compare floating-point values

Qac | Description
--- | ---
certccm-5026 | Incorrect floating point value comparison.

INT02

Recommendation

Understand integer conversion rules

Qac | Description
--- | ---
qac-1250 | Unsuffixed integer constant causes implicit conversion of other operand.
qac-1251 | Suffixed integer constant causes implicit conversion of other operand.
qac-1252 | Suffixed integer constant implicitly converted to different integer type.
qac-1253 | Unsuffixed integer constant implicitly converted to different integer type.
qac-1256 | An integer constant suffixed with L is being converted to type signed or unsigned long long on assignment.
qac-1257 | An integer constant suffixed with L or LL is being converted to a type of lower rank on assignment.
qac-1260 | Integer constant implicitly converted to a floating type.
qac-1263 | Floating constant causes implicit conversion of other (integral) operand.
qac-1266 | A floating constant is being converted to integral type on assignment.
qac-1274 | Unsuffixed floating constant causes implicit conversion of other (floating) operand.
qac-1290 | An integer constant of 'essentially signed' type is being converted to unsigned type on assignment.
qac-1291 | An integer constant of 'essentially unsigned' type is being converted to signed type on assignment.
qac-1292 | An integer constant of 'essentially signed' type is being converted to type char on assignment.
qac-1293 | An integer constant of 'essentially unsigned' type is being converted to type char on assignment.
qac-1294 | An integer constant of 'essentially signed' type is being converted to type _Bool on assignment.
qac-1295 | An integer constant of 'essentially unsigned' type is being converted to type _Bool on assignment.
qac-1296 | An integer constant of 'essentially signed' type is being converted to enum type on assignment.
qac-1297 | An integer constant of 'essentially unsigned' type is being converted to enum type on assignment.
qac-1298 | An integer constant of 'essentially signed' type is being converted to floating type on assignment.
qac-1299 | An integer constant of 'essentially unsigned' type is being converted to floating type on assignment.
qac-1800 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this arithmetic operation.
qac-1802 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this relational operation.
qac-1803 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this equality operation.
qac-1804 | The %1s operand (essential type: '%2s') will be implicitly converted to a floating type, '%3s', in this conditional operation.
qac-1810 | An operand of 'essentially character' type is being added to another operand of 'essentially character' type.
qac-1811 | An operand of 'essentially character' type is being subtracted from an operand of 'essentially signed' type.
qac-1812 | An operand of 'essentially character' type is being subtracted from an operand of 'essentially unsigned' type.
qac-1813 | An operand of 'essentially character' type is being balanced with an operand of 'essentially floating' type in this arithmetic operation.
qac-1820 | The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
qac-1821 | The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
qac-1822 | The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this relational operation.
qac-1823 | The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this equality operation.
qac-1824 | The %1s operand is non-constant and 'essentially signed' (%2s) but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
qac-1830 | The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
qac-1831 | The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
qac-1832 | The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this relational operation.
qac-1833 | The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this equality operation.
qac-1834 | The %1s operand is constant, 'essentially signed' (%2s) and negative but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
qac-1840 | The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this arithmetic operation.
qac-1841 | The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this bitwise operation.
qac-1842 | The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this relational operation.
qac-1843 | The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this equality operation.
qac-1844 | The %1s operand is constant, 'essentially signed' (%2s) and non-negative but will be implicitly converted to an unsigned type (%3s) in this conditional operation.
qac-1850 | The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this arithmetic operation.
qac-1851 | The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this bitwise operation.
qac-1852 | The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this relational operation.
qac-1853 | The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this equality operation.
qac-1854 | The %1s operand is 'essentially unsigned' (%2s) but will be implicitly converted to a signed type (%3s) in this conditional operation.
qac-1860 | The operands of this arithmetic operator are of different 'essential signedness' but will generate a result of type 'signed int'.
qac-1861 | The operands of this bitwise operator are of different 'essential signedness' but will generate a result of type 'signed int'.
qac-1862 | The operands of this relational operator are of different 'essential signedness' but will both be promoted to 'signed int' for comparison.
qac-1863 | The operands of this equality operator are of different 'essential signedness' but will both be promoted to 'signed int' for comparison.
qac-1864 | The 2nd and 3rd operands of this conditional operator are of different 'essential signedness'. The result will be in the promoted type 'signed int'.
qac-1880 | The operands of this relational operator are expressions of different 'essential type' categories (%1s and %2s).
qac-1881 | The operands of this equality operator are expressions of different 'essential type' categories (%1s and %2s).
qac-1882 | The 2nd and 3rd operands of this conditional operator are expressions of different 'essential type' categories (%1s and %2s).
qac-2100 | Integral promotion : unsigned char promoted to signed int.
qac-2101 | Integral promotion : unsigned short promoted to signed int.
qac-2102 | Integral promotion : unsigned char promoted to unsigned int.
qac-2103 | Integral promotion : unsigned short promoted to unsigned int.
qac-2104 | Integral promotion : signed char promoted to signed int.
qac-2105 | Integral promotion : signed short promoted to signed int.
qac-2106 | Integral promotion : plain char promoted to signed int.
qac-2107 | Integral promotion : plain char promoted to unsigned int.
qac-2109 | Integral promotion : _Bool promoted to signed int.
qac-2110 | Default argument promotion : unsigned char promoted to signed int.
qac-2111 | Default argument promotion : unsigned short promoted to signed int.
qac-2112 | Default argument promotion : unsigned char promoted to unsigned int.
qac-2113 | Default argument promotion : unsigned short promoted to unsigned int.
qac-2114 | Default argument promotion : signed char promoted to signed int.
qac-2115 | Default argument promotion : signed short promoted to signed int.
qac-2116 | Default argument promotion : plain char promoted to signed int.
qac-2117 | Default argument promotion : plain char promoted to unsigned int.
qac-2118 | Default argument promotion : float promoted to double.
qac-2119 | Default argument promotion : _Bool promoted to signed int.
qac-2120 | Integral promotion : unsigned bit-field promoted to signed int.
qac-2122 | Integral promotion : unsigned bit-field promoted to unsigned int.
qac-2124 | Integral promotion : signed bit-field promoted to signed int.
qac-2130 | Default argument promotion : unsigned bit-field promoted to signed int.
qac-2132 | Default argument promotion : unsigned bit-field promoted to unsigned int.
qac-2134 | Default argument promotion : signed bit-field promoted to signed int.
qac-4401 | An expression of 'essentially Boolean' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4402 | An expression of 'essentially Boolean' type (%1s) is being converted to enum type, '%2s' on assignment.
qac-4403 | An expression of 'essentially Boolean' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4404 | An expression of 'essentially Boolean' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4405 | An expression of 'essentially Boolean' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4410 | An expression of 'essentially character' type (%1s) is being converted to Boolean type, '%2s' on assignment.
qac-4412 | An expression of 'essentially character' type (%1s) is being converted to enum type, '%2s' on assignment.
qac-4413 | An expression of 'essentially character' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4414 | An expression of 'essentially character' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4415 | An expression of 'essentially character' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4420 | An expression of 'essentially enum' type (%1s) is being converted to Boolean type, '%2s' on assignment.
qac-4421 | An expression of 'essentially enum' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4422 | An expression of 'essentially enum' type (%1s) is being converted to a different enum type, '%2s' on assignment.
qac-4423 | An expression of 'essentially enum' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4424 | An expression of 'essentially enum' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4425 | An expression of 'essentially enum' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4430 | An expression of 'essentially signed' type (%1s) is being converted to Boolean type, '%2s' on assignment.
qac-4431 | An expression of 'essentially signed' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4432 | An expression of 'essentially signed' type (%1s) is being converted to enum type, '%2s' on assignment.
qac-4434 | A non-constant expression of 'essentially signed' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4435 | A non-constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4436 | A constant expression of 'essentially signed' type (%1s) is being converted to unsigned type, '%2s' on assignment.
qac-4437 | A constant expression of 'essentially signed' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4440 | An expression of 'essentially unsigned' type (%1s) is being converted to Boolean type, '%2s' on assignment.
qac-4441 | An expression of 'essentially unsigned' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4442 | An expression of 'essentially unsigned' type (%1s) is being converted to enum type, '%2s' on assignment.
qac-4443 | A non-constant expression of 'essentially unsigned' type (%1s) is being converted to a wider signed type, '%2s' on assignment.
qac-4445 | An expression of 'essentially unsigned' type (%1s) is being converted to floating type, '%2s' on assignment.
qac-4446 | A non-constant expression of 'essentially unsigned' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4447 | A constant expression of 'essentially unsigned' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4460 | A non-constant expression of 'essentially signed' type (%1s) is being converted to narrower signed type, '%2s' on assignment.
qac-4461 | A non-constant expression of 'essentially unsigned' type (%1s) is being converted to narrower unsigned type, '%2s' on assignment.
qac-4463 | A constant expression of 'essentially signed' type (%1s) is being converted to narrower signed type, '%2s' on assignment.
qac-4464 | A constant expression of 'essentially unsigned' type (%1s) is being converted to narrower unsigned type, '%2s' on assignment.
qac-4470 | A non-constant expression of 'essentially signed' type (%1s) is being passed to a function parameter of wider signed type, '%2s'.
qac-4471 | A non-constant expression of 'essentially unsigned' type (%1s) is being passed to a function parameter of wider unsigned type, '%2s'.
qac-4480 | A non-constant expression of 'essentially signed' type (%1s) is being returned from a function defined with a wider signed return type, '%2s'.
qac-4481 | A non-constant expression of 'essentially unsigned' type (%1s) is being returned from a function defined with a wider unsigned return type, '%2s'.

INT04

Recommendation

Enforce limits on integer values originating from tainted sources

Qac | Description
--- | ---
qac-2794 | Possible: Tainted right hand operand of shift operator is negative or too large.
qac-2804 | Possible: Overflow in signed arithmetic tainted operation.
qac-2854 | Possible: Implicit conversion of a tainted expression to a signed integer type of insufficient size.
qac-2859 | Possible: Casting a tainted expression to a signed integer type of insufficient size.
qac-2864 | Possible: Implementation-defined value resulting from left shift operation on tainted expression of signed type.
qac-2894 | Possible: Negative tainted value implicitly converted to an unsigned type.
qac-2899 | Possible: Negative tainted value cast to an unsigned type.
qac-2904 | Possible: Positive integer tainted value truncated by implicit conversion to a smaller unsigned type.
qac-2909 | Possible: Positive integer tainted value truncated by cast to a smaller unsigned type.
qac-2914 | Possible: Wraparound in unsigned arithmetic tainted operation.
qac-2924 | Possible: Left shift operation on tainted expression of unsigned type results in loss of high order bits.
qac-2944 | Possible: Result of implicit conversion of a tainted expression is only representable in a two's complement implementation.
qac-2949 | Possible: Result of cast of a tainted expression is only representable in a two's complement implementation.
qac-2954 | Possible: Negative tainted value used in array subscript or pointer arithmetic operation.
qac-2956 | Definite: Using object '%s' with tainted value.
qac-2959 | Possible: Using object '%s' with tainted value.

INT05

Recommendation

Do not use input functions to convert character data if they cannot handle all possible inputs

Qac | Description
--- | ---
certccm-5005 | '%s' is being used.

INT07

Recommendation

Use only explicitly signed or unsigned char type for numeric values

Qac | Description
--- | ---
qac-1292 | An integer constant of 'essentially signed' type is being converted to type char on assignment.
qac-1293 | An integer constant of 'essentially unsigned' type is being converted to type char on assignment.
qac-4401 | An expression of 'essentially Boolean' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4421 | An expression of 'essentially enum' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4431 | An expression of 'essentially signed' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4441 | An expression of 'essentially unsigned' type (%1s) is being converted to character type, '%2s' on assignment.
qac-4451 | An expression of 'essentially floating' type (%1s) is being converted to character type, '%2s' on assignment.

INT08

Recommendation

Verify that all integer values are in range

Qac | Description
--- | ---
qac-2800 | Constant: Overflow in signed arithmetic operation.
qac-2801 | Definite: Overflow in signed arithmetic operation.
qac-2802 | Apparent: Overflow in signed arithmetic operation.
qac-2803 | Suspicious: Overflow in signed arithmetic operation.
qac-2910 | Constant: Wraparound in unsigned arithmetic operation.
qac-2911 | Definite: Wraparound in unsigned arithmetic operation.
qac-2912 | Apparent: Wraparound in unsigned arithmetic operation.
qac-2913 | Suspicious: Wraparound in unsigned arithmetic operation.

INT09

Recommendation

Ensure enumeration constants map to unique values

Qac | Description
--- | ---
qac-0724 | The value of this implicitly-specified enumeration constant is not unique.

INT10

Recommendation

Do not assume a positive remainder when using the % operator

Qac | Description
--- | ---
qac-3103 | Result of signed division or remainder operation may be implementation defined.

INT12

Recommendation

Do not make assumptions about the type of a plain int bit-field when used in an expression

Qac | Description
--- | ---
qac-0634 | [I] Bit-field %1s in %2s has not been declared explicitly as unsigned or signed.
qac-0635 | [C99] Bit-field %1s in %2s has been declared with a type not explicitly supported.

INT13

Recommendation

Use bitwise operators only on unsigned operands

Qac | Description
--- | ---
qac-4532 | An expression of 'essentially signed' type (%1s) is being used as the %2s operand of this bitwise operator (%3s).
qac-4533 | An expression of 'essentially signed' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
qac-4534 | An expression of 'essentially signed' type (%1s) is being used as the right-hand operand of this shift operator (%2s).
qac-4543 | A non-negative constant expression of 'essentially signed' type (%1s) is being used as the left-hand operand of this shift operator (%2s).
qac-4544 | A non-negative constant expression of 'essentially signed' type (%1s) is being used as the right-hand operand of this shift operator (%2s).

INT16

Recommendation

Do not make assumptions about representation of signed integers

Qac | Description
--- | ---
qac-2940 | Constant: Result of implicit conversion is only representable in a two's complement implementation.
qac-2941 | Definite: Result of implicit conversion is only representable in a two's complement implementation.
qac-2942 | Apparent: Result of implicit conversion is only representable in a two's complement implementation.
qac-2943 | Suspicious: Result of implicit conversion is only representable in a two's complement implementation.
qac-2945 | Constant: Result of cast is only representable in a two's complement implementation.
qac-2946 | Definite: Result of cast is only representable in a two's complement implementation.
qac-2947 | Apparent: Result of cast is only representable in a two's complement implementation.
qac-2948 | Suspicious: Result of cast is only representable in a two's complement implementation.

INT18

Recommendation

Evaluate integer expressions in a larger size before comparing or assigning to that size

Qac | Description
--- | ---
qac-1890 | A composite expression of 'essentially signed' type (%1s) is being implicitly converted to a wider signed type, '%2s'.
qac-1891 | A composite expression of 'essentially unsigned' type (%1s) is being implicitly converted to a wider unsigned type, '%2s'.
qac-1892 | A composite expression of 'essentially floating' type (%1s) is being implicitly converted to a wider floating type, '%2s'.
qac-1893 | The 2nd and 3rd operands of this conditional operator are both 'essentially signed' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
qac-1894 | The 2nd and 3rd operands of this conditional operator are both 'essentially unsigned' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
qac-1895 | The 2nd and 3rd operands of this conditional operator are both 'essentially floating' ('%1s' and '%2s') but one is a composite expression of a narrower type than the other.
qac-4490 | A composite expression of 'essentially signed' type (%1s) is being converted to wider signed type, '%2s' on assignment.
qac-4491 | A composite expression of 'essentially unsigned' type (%1s) is being converted to wider unsigned type, '%2s' on assignment.
qac-4492 | A composite expression of 'essentially floating' type (%1s) is being converted to wider floating type, '%2s' on assignment.

INT30

Rule

Ensure that unsigned integer operations do not wrap

Qac | Description
--- | ---
qac-2910 | Constant: Wraparound in unsigned arithmetic operation.
qac-2911 | Definite: Wraparound in unsigned arithmetic operation.
qac-2912 | Apparent: Wraparound in unsigned arithmetic operation.
qac-2913 | Suspicious: Wraparound in unsigned arithmetic operation.
qac-3383 | Cannot identify wraparound guard for unsigned arithmetic expression.
qac-3384 | Cannot identify wraparound guard for dependent unsigned arithmetic expression.
qac-3385 | Cannot identify wraparound guard for sizeof-VLA expression.
qac-3386 | Cannot identify wraparound guard for dependent sizeof-VLA expression.

INT31

Rule

Ensure that integer conversions do not result in lost or misinterpreted data

Qac | Description
--- | ---
qac-2850 | Constant: Implicit conversion to a signed integer type of insufficient size.
qac-2851 | Definite: Implicit conversion to a signed integer type of insufficient size.
qac-2852 | Apparent: Implicit conversion to a signed integer type of insufficient size.
qac-2853 | Suspicious: Implicit conversion to a signed integer type of insufficient size.
qac-2855 | Constant: Casting to a signed integer type of insufficient size.
qac-2856 | Definite: Casting to a signed integer type of insufficient size.
qac-2857 | Apparent: Casting to a signed integer type of insufficient size.
qac-2858 | Suspicious: Casting to a signed integer type of insufficient size.
qac-2890 | Constant: Negative value implicitly converted to an unsigned type.
qac-2891 | Definite: Negative value implicitly converted to an unsigned type.
qac-2892 | Apparent: Negative value implicitly converted to an unsigned type.
qac-2893 | Suspicious: Negative value implicitly converted to an unsigned type.
qac-2895 | Constant: Negative value cast to an unsigned type.
qac-2896 | Definite: Negative value cast to an unsigned type.
qac-2897 | Apparent: Negative value cast to an unsigned type.
qac-2898 | Suspicious: Negative value cast to an unsigned type.
qac-2900 | Constant: Positive integer value truncated by implicit conversion to a smaller unsigned type.
qac-2901 | Definite: Positive integer value truncated by implicit conversion to a smaller unsigned type.
qac-2902 | Apparent: Positive integer value truncated by implicit conversion to a smaller unsigned type.
qac-2903 | Suspicious: Positive integer value truncated by implicit conversion to a smaller unsigned type.
qac-2905 | Constant: Positive integer value truncated by cast to a smaller unsigned type.
qac-2906 | Definite: Positive integer value truncated by cast to a smaller unsigned type.
qac-2907 | Apparent: Positive integer value truncated by cast to a smaller unsigned type.
qac-2908 | Suspicious: Positive integer value truncated by cast to a smaller unsigned type.

INT32

Rule

Ensure that operations on signed integers do not result in overflow

Qac | Description
--- | ---
qac-2800 | Constant: Overflow in signed arithmetic operation.
qac-2801 | Definite: Overflow in signed arithmetic operation.
qac-2802 | Apparent: Overflow in signed arithmetic operation.
qac-2803 | Suspicious: Overflow in signed arithmetic operation.
qac-2860 | Constant: Implementation-defined value resulting from left shift operation on expression of signed type.
qac-2861 | Definite: Implementation-defined value resulting from left shift operation on expression of signed type.
qac-2862 | Apparent: Implementation-defined value resulting from left shift operation on expression of signed type.
qac-2863 | Suspicious: Implementation-defined value resulting from left shift operation on expression of signed type.

INT33

Rule

Ensure that division and remainder operations do not result in divide-by-zero errors

Qac | Description
--- | ---
qac-2830 | Constant: Division by zero.
qac-2831 | Definite: Division by zero.
qac-2832 | Apparent: Division by zero.
qac-2833 | Suspicious: Division by zero.

INT34

Rule

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

Qac | Description
--- | ---
qac-0499 | Right operand of shift operator is greater than or equal to the width of the essential type of the left operand.
qac-2790 | Constant: Right hand operand of shift operator is negative or too large.
qac-2791 | Definite: Right hand operand of shift operator is negative or too large.
qac-2792 | Apparent: Right hand operand of shift operator is negative or too large.
qac-2793 | Suspicious: Right hand operand of shift operator is negative or too large.

INT35

Rule

Use correct integer precisions

Qac | Description
--- | ---
qac-0582 | [I] Multiplying the size of an integer by CHAR_BIT will include padding bits in the result.

INT36

Rule

Converting a pointer to integer or integer to pointer

Qac | Description
--- | ---
qac-0303 | [I] Cast between a pointer to volatile object and an integral type.
qac-0305 | [I] Cast between a pointer to function and an integral type.
qac-0306 | [I] Cast between a pointer to object and an integral type.
qac-0309 | [U] Integral type is not large enough to hold a pointer value.
qac-0324 | [u] Cast between a pointer to incomplete type and an integral type.
qac-0326 | [I] Cast between a pointer to void and an integral type.
qac-0360 | An expression of pointer type is being converted to type _Bool on assignment.
qac-0361 | An expression of pointer type is being cast to type _Bool.
qac-0362 | An expression of essentially Boolean type is being cast to a pointer.

MEM02

Recommendation

Immediately cast the result of a memory allocation function call into a pointer to the allocated type

Qac | Description
--- | ---
qac-0695 | Type given in sizeof is not compatible with the pointed to type used to cast malloc.

MEM03

Recommendation

Clear sensitive information stored in reusable resources

Qac | Description
--- | ---
certccm-5010 | '%s' is being used.

MEM05

Recommendation

Avoid large stack allocations

Qac | Description
--- | ---
qac-1051 | [C99] A variable length array has been declared.
rcma-1520 | Functions are indirectly recursive.
qac-3670 | Recursive call to function containing this call.

MEM30

Rule

Do not access freed memory

Qac | Description
--- | ---
qac-4866 | Definite: Memory is used after free.
qac-4867 | Apparent: Memory is used after free.
qac-4868 | Suspicious: Memory is used after free.
qac-4871 | Definite: Zero size has been passed to realloc, malloc or calloc.
qac-4872 | Apparent: Zero size has been passed to realloc, malloc or calloc.
qac-4873 | Suspicious: Zero size has been passed to realloc, malloc or calloc.

MEM31

Rule

Free dynamically allocated memory when no longer needed

Qac | Description
--- | ---
qac-2706 | Definite: Allocated memory is not deallocated.
qac-2707 | Apparent: Allocated memory is not deallocated.
qac-2708 | Suspicious: Allocated memory is not deallocated.

MEM33

Rule

Allocate and copy structures containing a flexible array member dynamically

Qac | Description
--- | ---
qac-1061 | [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of structure member '%3s'.
qac-1062 | [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of array elements.
qac-1063 | [C99] '%s' is an automatically-allocated object of a type declared with a flexible array member.
qac-1064 | [C99] '%s' is a statically-allocated object of a type declared with a flexible array member.

MEM34

Rule

Only free memory allocated dynamically

Qac | Description
--- | ---
qac-2721 | Definite: Deallocation of non dynamic memory.
qac-2722 | Apparent: Deallocation of non dynamic memory.
qac-2723 | Suspicious: Deallocation of non dynamic memory.

MEM35

Rule

Allocate sufficient memory for an object

Qac | Description
--- | ---
qac-0696 | The size of the allocated memory block is smaller than the size of the object type addressed by the pointer cast.
qac-0701 | Argument for memory size does not refer to 'sizeof (%1s)'.
qac-1069 | [C99] Taking sizeof a struct with a flexible array member without adding the array size.
qac-1071 | [C99] Taking sizeof a struct with a flexible array member without explicitly adding the array size in terms of element sizes.
qac-1073 | [C99] Taking sizeof a struct with a flexible array member while adding an array size based on the wrong element type.
qac-2840 | Constant: Dereference of an invalid pointer value.
qac-2841 | Definite: Dereference of an invalid pointer value.
qac-2842 | Apparent: Dereference of an invalid pointer value.
qac-2843 | Suspicious: Dereference of an invalid pointer value.
qac-2935 | Constant: Dereference of an invalid char pointer value.
qac-2936 | Definite: Dereference of an invalid char pointer value.
qac-2937 | Apparent: Dereference of an invalid char pointer value.
qac-2938 | Suspicious: Dereference of an invalid char pointer value.

MEM36

Rule

Do not modify the alignment of objects by calling realloc()

Qac | Description
--- | ---
certccm-5027 | '%s' is being used.

MSC01

Recommendation

Strive for logical completeness

Qac | Description
--- | ---
qac-2000 | No 'else' clause exists for this 'if' statement.
qac-2002 | No 'default' label found in this 'switch' statement.
qac-2004 | No concluding 'else' exists in this 'if'-'else'-'if' statement.

MSC04

Recommendation

Use comments consistently and in a readable fashion

Qac | Description
--- | ---
qac-3108 | Nested comments are not recognized in the ISO standard.

MSC07

Recommendation

Detect and remove dead code

Qac | Description
--- | ---
rcma-1501 | The function '%1s' is declared but is not used within this project.
rcma-1503 | The function '%1s' is defined but is not used within this project.
qac-2008 | Code statements precede the first label in this 'switch' construct.
qac-2877 | This loop will never be executed more than once.
qac-2880 | This code is unreachable.
qac-2881 | The code in this 'default' clause is unreachable.
qac-2882 | This 'switch' statement will bypass the initialization of local variables.
qac-2883 | This 'goto' statement will always bypass the initialization of local variables.
qac-2980 | The value of this function parameter is never used before being modified.
qac-2981 | This initialization is redundant. The value of this object is never used before being modified.
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3202 | The label '%s:' is not used in this function and could be removed.
qac-3203 | The variable '%s' is set but never used.
qac-3205 | The identifier '%1s' is not used and could be removed.
qac-3206 | The parameter '%s' is not used in this function.
qac-3207 | File scope static, '%1s', is not used, and could be removed.
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
qac-3219 | Static function '%1s()' is not used within this translation unit.
qac-3229 | File scope static, '%1s', is written but never used.
qac-3404 | Statement contains a redundant * operator at top level. *p++ means *(p++) not (*p)++.
qac-3422 | Statement contains a redundant operator at top level.
qac-3423 | Statement contains a redundant cast at top level.
qac-3425 | One branch of this conditional operation is a redundant expression.
qac-3470 | The operand of 'sizeof' is not an expression which designates either an object or a type.

MSC09

Recommendation

Character encoding: Use subset of ASCII for safety

Qac | Description
--- | ---
qac-0285 | [I] Character constant contains character which is not a member of the basic source character set.
qac-0286 | [I] String literal contains character which is not a member of the basic source character set.
qac-0287 | [I] Header name contains character which is not a member of the basic source character set.
qac-0288 | [I] Source file '%s' has comments containing characters which are not members of the basic source character set.
qac-0289 | [I] Source file '%s' has preprocessing tokens containing characters which are not members of the basic source character set.
qac-0299 | [I] Source file '%s' includes #pragma directives containing characters which are not members of the basic source character set.

MSC12

Recommendation

Detect and remove code that has no effect or is never executed

Qac | Description
--- | ---
qac-3110 | The left-hand operand of this ',' has no side effects.
qac-3112 | This statement has no side-effect - it can be removed.
qac-3307 | The operand of 'sizeof' is an expression with implied side effects, but they will not be evaluated.
qac-3404 | Statement contains a redundant * operator at top level. *p++ means *(p++) not (*p)++.
qac-3426 | Right hand side of comma expression has no side effect and its value is not used.
qac-3427 | Right hand side of logical operator has no side effect and its value is not used.

MSC13

Recommendation

Detect and remove unused values

Qac | Description
--- | ---
rcma-1500 | The object '%1s' is declared but is not used within this project.
rcma-1502 | The object '%1s' is defined but is not used within this project.
qac-2980 | The value of this function parameter is never used before being modified.
qac-2981 | This initialization is redundant. The value of this object is never used before being modified.
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3203 | The variable '%s' is set but never used.
qac-3205 | The identifier '%1s' is not used and could be removed.
qac-3206 | The parameter '%s' is not used in this function.
qac-3207 | File scope static, '%1s', is not used, and could be removed.
qac-3229 | File scope static, '%1s', is written but never used.

MSC14

Recommendation

Do not introduce unnecessary platform dependencies

Qac | Description
--- | ---
qac-0202 | [I] '-' character in '[]' conversion specification is implementation defined.
qac-0240 | [I] This file contains the control-M character at the end of a line.
qac-0241 | [I] This file contains the control-Z character - was this transferred from a PC?
qac-0242 | [I] This file contains the control-M character in the middle of a line.
qac-0243 | [I] Treating an invalid character as whitespace.
qac-0246 | [E] Binary integer constants are a language extension.
qac-0284 | [I] Multiple character constants have implementation defined values.
qac-0551 | [E] Cast may not operate on the left operand of the assignment operator.
qac-0581 | [I] Floating-point constant may be too small to be representable.
qac-0601 | [E] Function 'main()' is not of type 'int (void)' or 'int (int, char *[])'.
qac-0633 | [E] Empty structures and unions are a language extension.
qac-0634 | [I] Bit-field %1s in %2s has not been declared explicitly as unsigned or signed.
qac-0635 | [C99] Bit-field %1s in %2s has been declared with a type not explicitly supported.
qac-0660 | [C11] Defining an unnamed member in a struct or union.
qac-0662 | [C11] Accessing a member of an unnamed struct or union member.
qac-0830 | [E] Unrecognized text encountered after a preprocessing directive.
qac-0831 | [E] Use of '\\' in this '#include' line is a PC extension - this usage is non-portable.
qac-0840 | [E] Extra tokens at end of #include directive.
qac-0899 | [E] Unrecognized preprocessing directive has been ignored - assumed to be a language extension.
qac-1001 | [E] '#include %s' is a VMS extension.
qac-1002 | [E] '%s' is not a legal identifier in ISO C.
qac-1003 | [E] '#%s' is a language extension for in-line assembler. All statements located between #asm and #endasm will be ignored.
qac-1006 | [E] This in-line assembler construct is a language extension. The code has been ignored.
qac-1008 | [E] '#%s' is not a legal ISO C preprocessing directive.
qac-1012 | [E] Use of a C++ reference type ('type &') will be treated as a language extension.
qac-1014 | [E] Non-standard type specifier - this will be treated as a language extension.
qac-1015 | [E] '%s' is not a legal keyword in ISO C - this will be treated as a language extension.
qac-1019 | [E] '@ address' is not supported in ISO C - this will be treated as a language extension.
qac-1020 | [E] '__typeof__' is not supported in ISO C, and is treated as a language extension.
qac-1021 | [E] A statement expression is not supported in ISO C, and is treated as a language extension.
qac-1022 | [E] '__alignof__' is a language extension. It is mapped to the standard '_Alignof' operator.
qac-1026 | [E] The indicated @word construct has been ignored.
qac-1028 | [E] Use of the sizeof operator in a preprocessing directive is a language extension.
qac-1029 | [E] Whitespace encountered between backslash and new-line has been ignored.
qac-1034 | [E] Macro defined with named variable argument list. This is a language extension.
qac-1035 | [E] No macro arguments supplied for variable argument list. This is a language extension.
qac-1036 | [E] Comma before ## ignored in expansion of variadic macro. This is a language extension.
qac-1037 | [E] Arrays of length zero are a language extension.
qac-1038 | [E] The sequence ", ##__VA_ARGS__" is a language extension.
qac-1041 | [E] Empty aggregate initializers are a language extension.
qac-1042 | [E] Using I64 or UI64 as an integer constant suffix. This is a language extension.
qac-1043 | [E] Defining an anonymous union object. This is a language extension.
qac-1044 | [E] Defining an anonymous struct object. This is a language extension.
qac-1045 | [E] Use of the #include_next preprocessing directive is a language extension.
qac-1046 | [E] Function is being declared with default argument syntax. This is a language extension.
qac-1434 | [I] This enum constant is not representable in a 16 bit integer type.
qac-3664 | [E] Using a dot operator to access an individual bit is a language extension.

MSC15

Recommendation

Do not depend on undefined behavior

Qac | Description
--- | ---
qac-0160 | [U] Using unsupported conversion specifier number %1s.
qac-0161 | [U] Unknown length modifier used with 'i' or 'd' conversion specifier, number %1s.
qac-0162 | [U] Unknown length modifier used with 'o' conversion specifier, number %1s.
qac-0163 | [U] Unknown length modifier used with 'u' conversion specifier, number %1s.
qac-0164 | [U] Unknown length modifier used with 'x' conversion specifier, number %1s.
qac-0165 | [U] Unknown length modifier used with 'X' conversion specifier, number %1s.
qac-0166 | [U] Unknown length modifier used with 'f' conversion specifier, number %1s.
qac-0167 | [U] Unknown length modifier used with 'e' conversion specifier, number %1s.
qac-0168 | [U] Unknown length modifier used with 'E' conversion specifier, number %1s.
qac-0169 | [U] Unknown length modifier used with 'g' conversion specifier, number %1s.
qac-0170 | [U] Unknown length modifier used with 'G' conversion specifier, number %1s.
qac-0171 | [U] Unknown length modifier used with 'c' conversion specifier, number %1s.
qac-0172 | [U] Unknown length modifier used with '%%' conversion specifier, number %1s.
qac-0173 | [U] Unknown length modifier used with 's' conversion specifier, number %1s.
qac-0174 | [U] Unknown length modifier used with 'n' conversion specifier, number %1s.
qac-0175 | [U] Unknown length modifier used with 'p' conversion specifier, number %1s.
qac-0176 | [U] Incomplete conversion specifier, number %1s.
qac-0177 | [U] Field width of format conversion specifier exceeds 509 characters.
qac-0178 | [U] Precision of format conversion specifier exceeds 509 characters.
qac-0179 | [U] Argument type does not match conversion specifier number %1s.
qac-0184 | [U] Insufficient arguments to satisfy conversion specifier, number %1s.
qac-0185 | [U] Call contains more arguments than conversion specifiers.
qac-0186 | [U] A call to this function must include at least one argument.
qac-0190 | [U] Using unsupported conversion specifier number %1s.
qac-0191 | [U] Unknown length modifier used with 'd/i/n' conversion specifier, number %1s.
qac-0192 | [U] Unknown length modifier used with 'o' conversion specifier, number %1s.
qac-0193 | [U] Unknown length modifier used with 'u' conversion specifier, number %1s.
qac-0194 | [U] Unknown length modifier used with 'x/X' conversion specifier, number %1s.
qac-0195 | [U] Unknown length modifier used with 'e/E/f/F/g/G' conversion specifier, number %1s.
qac-0196 | [U] Unknown length modifier used with 's' conversion specifier, number %1s.
qac-0197 | [U] Unknown length modifier used with 'p' conversion specifier, number %1s.
qac-0198 | [U] Unknown length modifier used with '%%' conversion specifier, number %1s.
qac-0199 | [U] Unknown length modifier used with '[' conversion specifier, number %1s.
qac-0200 | [U] Unknown length modifier used with 'c' conversion specifier, number %1s.
qac-0201 | [U] Incomplete conversion specifier, number %1s.
qac-0203 | [U] Value of character prior to '-' in '[]' is greater than following character.
qac-0204 | [U] Field width of format conversion specifier exceeds 509 characters.
qac-0206 | [U] Argument type does not match conversion specifier number %1s.
qac-0207 | [U] 'scanf' expects address of objects being stored into.
qac-0208 | [U] Same character occurs in scanset more than once.
qac-0235 | [U] Unknown escape sequence.
qac-0275 | [U] Floating value is out of range for conversion to destination type.
qac-0301 | [u] Cast between a pointer to object and a floating type.
qac-0302 | [u] Cast between a pointer to function and a floating type.
qac-0304 | [U] The address of an array declared 'register' may not be computed.
qac-0307 | [u] Cast between a pointer to object and a pointer to function.
qac-0309 | [U] Integral type is not large enough to hold a pointer value.
qac-0323 | [C] Cast between a pointer to incomplete type and a floating type.
qac-0327 | [C] Cast between a pointer to void and a floating type.
qac-0337 | [U] String literal has undefined value. This may be a result of using '#' on \\.
qac-0400 | [U] '%1s' is modified more than once between sequence points - evaluation order unspecified.
qac-0401 | [U] '%1s' may be modified more than once between sequence points - evaluation order unspecified.
qac-0402 | [U] '%1s' is modified and accessed between sequence points - evaluation order unspecified.
qac-0403 | [U] '%1s' may be modified and accessed between sequence points - evaluation order unspecified.
qac-0475 | [u] Operand of 'sizeof' is an expression designating a bit-field.
qac-0543 | [U] 'void' expressions have no value and may not be used in expressions.
qac-0544 | [U] The value of an incomplete 'union' may not be used.
qac-0545 | [U] The value of an incomplete 'struct' may not be used.
qac-0602 | [U] The identifier '%s' is reserved for use by the library.
qac-0603 | [U] The macro identifier '%s' is reserved.
qac-0623 | [U] '%s' has incomplete type and no linkage - this is undefined.
qac-0625 | [U] '%s' has been declared with both internal and external linkage - the behaviour is undefined.
qac-0626 | [U] '%s' has different type to previous declaration (which is no longer in scope).
qac-0630 | [U] More than one definition of '%s' (with external linkage).
qac-0632 | [U] Tentative definition of '%s' with internal linkage cannot have unknown size.
qac-0636 | [U] There are no named members in this 'struct' or 'union'.
qac-0654 | [U] Using 'const' or 'volatile' in a function return type is undefined.
qac-0658 | [U] Parameter cannot have 'void' type.
qac-0661 | [U] '%1s()' may not have a storage class specifier of '%2s' when declared at block scope.
qac-0667 | [U] '%s' is declared as a typedef and may not be redeclared as an object at an inner scope without an explicit type specifier.
qac-0668 | [U] '%s' is declared as a typedef and may not be redeclared as a member of a 'struct' or 'union' without an explicit type specifier.
qac-0672 | [U] The initializer for a 'struct', 'union' or array is not enclosed in braces.
qac-0676 | [u] Array element is of function type. Arrays cannot be constructed from function types.
qac-0678 | [u] Array element is array of unknown size. Arrays cannot be constructed from incomplete types.
qac-0680 | [u] Array element is 'void' or an incomplete 'struct' or 'union'. Arrays cannot be constructed from incomplete types.
qac-0706 | [U] Label '%s' is not unique within this function.
qac-0745 | [U] 'return;' found in '%s()', which has been defined with a non-'void' return type.
qac-0777 | [U] External identifier does not differ from other identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0779 | [U] Identifier does not differ from other identifier(s) (e.g. '%1s') within the specified number of significant characters.
qac-0813 | [U] Using any of the characters ' " or /* in '#include <%s>' gives undefined behaviour.
qac-0814 | [U] Using the characters ' or /* in '#include "%s"' gives undefined behaviour.
qac-0821 | [C] '#include' does not identify a header or source file that can be processed.
qac-0836 | [U] Definition of macro named 'defined'.
qac-0837 | [U] Use of '#undef' to remove the operator 'defined'.
qac-0848 | [U] Attempting to #undef '%s', which is a predefined macro name.
qac-0853 | [U] Macro arguments contain a sequence of tokens that has the form of a preprocessing directive.
qac-0854 | [U] Attempting to #define '%s', which is a predefined macro name.
qac-0864 | [U] '#line' directive specifies line number which is not in the range 1 to 32767.
qac-0865 | [U] '#line' directive is badly formed.
qac-0867 | [U] '#line' has not been followed by a line number.
qac-0872 | [U] Result of '##' operator is not a legal preprocessing token.
qac-0874 | [U] Character string literal and wide character string literal are adjacent.
qac-0885 | [U] The token 'defined' is generated in the expansion of this macro.
qac-0887 | [U] Use of 'defined' must match either 'defined(identifier)' or 'defined identifier'.
qac-0888 | [U] 'defined' requires an identifier as an argument.
qac-0914 | [U] Source file does not end with a newline character.
qac-0915 | [U] Source file ends with a backslash character followed by a newline.
qac-0942 | [U] A * can only be used to specify array size within function prototype scope.
rcma-1509 | '%1s' has external linkage and has multiple definitions.
rcma-1510 | '%1s' has external linkage and has incompatible declarations.
qac-3113 | [U] 'return' statement includes no expression but function '%s()' is implicitly of type 'int'.
qac-3114 | [U] Function '%s()' is implicitly of type 'int' but ends without returning a value.
qac-3239 | [U] inline function '%1s' has external linkage, but is not defined within this translation unit.
qac-3311 | [u] An earlier jump to this statement will bypass the initialization of local variables.
qac-3312 | [u] This goto statement will jump into a previous block and bypass the initialization of local variables.
qac-3319 | [U] Function called with number of arguments which differs from number of parameters in definition.
qac-3437 | [u] '%1s' is only provided by the standard library as a macro, but is being used as a value here.
qac-3438 | [U] #undef'ing the assert macro to call a function of that name causes undefined behaviour.

MSC17

Recommendation

Finish every set of statements associated with a case label with a break statement

Qac | Description
--- | ---
qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MSC20

Recommendation

Do not use a switch statement to transfer control into a complex block

Qac | Description
--- | ---
qac-2019 | 'Switch' label is located within a nested code block.

MSC30

Rule

Do not use the rand() function for generating pseudorandom numbers

Qac | Description
--- | ---
certccm-5022 | '%s' is being used.

MSC32

Rule

Properly seed pseudorandom number generators

Qac | Description
--- | ---
certccm-5031 | PRNG is not seeded before usage.

MSC33

Rule

Do not pass invalid data to the asctime() function

Qac | Description
--- | ---
certccm-5032 | '%s' is being used.

MSC37

Rule

Ensure that control never reaches the end of a non-void function

Qac | Description
--- | ---
qac-2888 | This function has been declared with a non-void 'return' type but ends with an implicit 'return ;' statement.

MSC38

Rule

Do not treat a predefined identifier as an object if it might only be implemented as a macro

Qac | Description
--- | ---
qac-3437 | [u] '%1s' is only provided by the standard library as a macro, but is being used as a value here.
qac-3475 | [u] '%1s' is only provided by the standard library as a macro, but is being declared as a value here.

MSC39

Rule

Do not call va_arg() on a va_list that has an indeterminate value

Qac | Description
--- | ---
qac-3497 | [U] The va_list object '%1s' is both passed as an argument and accessed with va_arg.

MSC40

Rule

Do not violate constraints

Qac | Description
--- | ---
qac-0232 | [C] Value of hex escape sequence is not representable in type 'unsigned char'.
qac-0233 | [C] Value of octal escape sequence is not representable in type 'unsigned char'.
qac-0244 | [C] Value of character constant is not representable in type 'int'.
qac-0268 | [S] Comment open at end of translation unit.
qac-0278 | [C] Overflow in signed arithmetic operation on constant operands.
qac-0321 | [C] Declaration within 'for' statement defines an identifier '%1s' which is not an object.
qac-0322 | [C] Illegal storage class specifier used in 'for' statement declaration.
qac-0338 | [C] Octal or hex escape sequence value is too large for 'unsigned char' or 'wchar_t' type.
qac-0422 | [C] Function call contains fewer arguments than prototype specifies.
qac-0423 | [C] Function call contains more arguments than prototype specifies.
qac-0426 | [C] Called function has incomplete return type.
qac-0427 | [C] Object identifier used as if it were a function or a function pointer identifier.
qac-0429 | [C] Function argument is not of arithmetic type.
qac-0430 | [C] Function argument is not of compatible 'struct'/'union' type.
qac-0431 | [C] Function argument points to a more heavily qualified type.
qac-0432 | [C] Function argument is not of compatible pointer type.
qac-0435 | [C] The 'struct'/'union' member '%s' does not exist.
qac-0436 | [C] Left operand of '.' must be a 'struct' or 'union' object.
qac-0437 | [C] Left operand of '->' must be a pointer to a 'struct' or 'union' object.
qac-0446 | [C] Operand of ++/-- must have scalar (arithmetic or pointer) type.
qac-0447 | [C] Operand of ++/-- must be a modifiable object.
qac-0448 | [C] Operand of ++/-- must not be a pointer to an object of unknown size.
qac-0449 | [C] Operand of ++/-- must not be a pointer to a function.
qac-0451 | [C] Subscripting requires a pointer (or array lvalue).
qac-0452 | [C] Cannot subscript a pointer to an object of unknown size.
qac-0453 | [C] An array subscript must have integral type.
qac-0454 | [C] The address-of operator '&' cannot be applied to an object declared with 'register'.
qac-0456 | [C] This expression does not have an address - '&' may only be applied to an lvalue or a function designator.
qac-0457 | [C] The address-of operator '&' cannot be applied to a bit-field.
qac-0458 | [C] Indirection operator '*' requires operand of pointer type.
qac-0460 | [C] The keyword static is used in the declaration of the index of an array which is not a function parameter.
qac-0461 | [C] The keyword static is used in the declaration of an inner index of a multi-dimensional array.
qac-0462 | [C] A type qualifier (const, volatile or restrict) is used in the declaration of the index of an array which is not a function parameter.
qac-0463 | [C] A type qualifier (const, volatile or restrict) is used in the declaration of an inner index of a multi-dimensional array.
qac-0466 | [C] Unary '+' requires arithmetic operand.
qac-0467 | [C] Operand of '!' must have scalar (arithmetic or pointer) type.
qac-0468 | [C] Unary '-' requires arithmetic operand.
qac-0469 | [C] Bitwise not '~' requires integral operand.
qac-0476 | [C] 'sizeof' cannot be applied to a bit-field.
qac-0477 | [C] 'sizeof' cannot be applied to a function.
qac-0478 | [C] 'sizeof' cannot be applied to an object of unknown size.
qac-0481 | [C] Only scalar expressions may be cast to other types.
qac-0482 | [C] Expressions may only be cast to 'void' or scalar types.
qac-0483 | [C] A pointer to an object of unknown size cannot be the operand of an addition operator.
qac-0484 | [C] A pointer to an object of unknown size cannot be the operand of a subtraction operator.
qac-0485 | [C] Only integral expressions may be added to pointers.
qac-0486 | [C] Only integral expressions and compatible pointers may be subtracted from pointers.
qac-0487 | [C] If two pointers are subtracted, they must be pointers that address compatible types.
qac-0493 | [C] Type of left operand is not compatible with this operator.
qac-0494 | [C] Type of right operand is not compatible with this operator.
qac-0495 | [C] Left operand of '%', '<<', '>>', '&', '^' or '|' must have integral type.
qac-0496 | [C] Right operand of '%', '<<', '>>', '&', '^' or '|' must have integral type.
qac-0513 | [C] Relational operator used to compare pointers to incompatible types.
qac-0514 | [C] Relational operator used to compare a pointer with an incompatible operand.
qac-0515 | [C] Equality operator used to compare a pointer with an incompatible operand.
qac-0536 | [C] First operand of '&&', '||' or '?' must have scalar (arithmetic or pointer) type.
qac-0537 | [C] Second operand of '&&' or '||' must have scalar (arithmetic or pointer) type.
qac-0540 | [C] 2nd and 3rd operands of conditional operator '?' must have compatible types.
qac-0541 | [C] Argument no. %s does not have object type.
qac-0542 | [C] Controlling expression must have scalar (arithmetic or pointer) type.
qac-0546 | [C] 'enum %s' has unknown content. Use of an enum tag with undefined content is not permitted.
qac-0547 | [C] This declaration of tag '%s' conflicts with a previous declaration.
qac-0550 | [C] Left operand of '+=' or '-=' is a pointer to an object of unknown size.
qac-0554 | [C] 'static %s()' has been declared and called but no definition has been given.
qac-0555 | [C] Invalid assignment to object of void type or array type.
qac-0556 | [C] Left operand of assignment must be a modifiable object.
qac-0557 | [C] Right operand of assignment is not of arithmetic type.
qac-0558 | [C] Right operand of '+=' or '-=' must have integral type when left operand is a pointer.
qac-0559 | [C] Right operand of '<<=', '>>=', '&=', '|=', '^=' or '%=' must have integral type.
qac-0560 | [C] Left operand of '<<=', '>>=', '&=', '|=', '^=' or '%=' must have integral type.
qac-0561 | [C] Right operand of assignment is not of compatible 'struct'/'union' type.
qac-0562 | [C] Right operand of assignment points to a more heavily qualified type.
qac-0563 | [C] Right operand of assignment is not of compatible pointer type.
qac-0564 | [C] Left operand of assignment must be an lvalue (it must designate an object).
qac-0565 | [C] Left operand of '+=' or '-=' must be of arithmetic or pointer to object type.
qac-0580 | [C] Constant is too large to be representable.
qac-0588 | [C] Width of bit-field must be an integral constant expression.
qac-0589 | [C] Enumeration constant must be an integral constant expression.
qac-0590 | [C] Array bound must be an integral constant expression.
qac-0591 | [C] A 'case' label must be an integral constant expression.
qac-0605 | [C] A declaration must declare a tag or an identifier.
qac-0616 | [C] Illegal combination of type specifiers or storage class specifiers.
qac-0619 | [C] The identifier '%1s' has already been defined in the current scope within the ordinary identifier namespace.
qac-0620 | [C] Cannot initialize '%s' because it has unknown size.
qac-0621 | [C] The struct/union '%s' cannot be initialized because it has unknown size.
qac-0622 | [C] The identifier '%s' has been declared both with and without linkage in the same scope.
qac-0627 | [C] '%s' has different type to previous declaration in the same scope.
qac-0628 | [C] '%s' has different type to previous declaration at wider scope.
qac-0629 | [C] More than one definition of '%s' (with internal linkage).
qac-0631 | [C] More than one declaration of '%s' (with no linkage).
qac-0638 | [C] Duplicate member name '%s' in 'struct' or 'union'.
qac-0640 | [C] '%s' in 'struct' or 'union' type may not have 'void' type.
qac-0641 | [C] '%s' in 'struct' or 'union' type may not have function type.
qac-0642 | [C] '%s' in 'struct' or 'union' type may not be an array of unknown size.
qac-0643 | [C] '%s' in 'struct' or 'union' type may not be a 'struct' or 'union' with unknown content.
qac-0644 | [C] Width of bit-field must be no bigger than the width of an 'int'.
qac-0645 | [C] A zero width bit-field cannot be given a name.
qac-0646 | [C] Enumeration constants must have values representable as 'int's.
qac-0649 | [C] K&R style declaration of parameters is not legal after a function header that includes a parameter list.
qac-0650 | [C] Illegal storage class specifier on named function parameter.
qac-0651 | [C] Missing type specifiers in function declaration.
qac-0653 | [C] Duplicate definition of 'struct', 'union' or 'enum' tag '%s'.
qac-0655 | [C] Illegal storage class specifier on unnamed function parameter.
qac-0656 | [C] Function return type cannot be function or array type, or an incomplete struct/union (for function definition).
qac-0657 | [C] Unnamed parameter specified in function definition.
qac-0659 | [C] The identifier '%s' was not given in the parameter list.
qac-0664 | [C] Parameter specified with type 'void'.
qac-0665 | [C] Two parameters have been declared with the same name '%1s'.
qac-0669 | [C] The restrict qualifier can only be applied to pointer types derived from object or incomplete types.
qac-0671 | [C] Initializer for object of arithmetic type is not of arithmetic type.
qac-0673 | [C] Initializer points to a more heavily qualified type.
qac-0674 | [C] Initializer for pointer is of incompatible type.
qac-0675 | [C] Initializer is not of compatible 'struct'/'union' type.
qac-0677 | [C] Array size is negative, or unrepresentable.
qac-0682 | [C] Initializer for object of a character type is a string literal.
qac-0683 | [C] Initializer for object of a character type is a wide string literal.
qac-0684 | [C] Too many initializers.
qac-0685 | [C] Initializer for any object with static storage duration must be a constant expression.
qac-0690 | [C] String literal contains too many characters to initialize object.
qac-0698 | [C] String literal used to initialize an object of incompatible type.
qac-0699 | [C] String literal used to initialize a pointer of incompatible type.
qac-0708 | [C] No definition found for the label '%s' in this function.
qac-0709 | [C] Initialization of locally declared 'extern %s' is illegal.
qac-0736 | [C] 'case' label does not have unique value within this 'switch' statement.
qac-0737 | [C] More than one 'default' label found in 'switch' statement.
qac-0738 | [C] Controlling expression in a 'switch' statement must have integral type.
qac-0746 | [C] 'return exp;' found in '%s()' whose return type is 'void'.
qac-0747 | [C] 'return exp;' found in '%s()' whose return type is qualified 'void'.
qac-0755 | [C] 'return' expression is not of arithmetic type.
qac-0756 | [C] 'return' expression is not of compatible 'struct'/'union' type.
qac-0757 | [C] 'return' expression points to a more heavily qualified type.
qac-0758 | [C] 'return' expression is not of compatible pointer type.
qac-0766 | [C] 'continue' statement found outside an iteration statement.
qac-0767 | [C] 'break' statement found outside a 'switch' or iteration statement.
qac-0768 | [C] 'case' or 'default' found outside a 'switch' statement.
qac-0774 | [C] 'auto' may not be specified on global declaration of '%s'.
qac-0775 | [C] 'register' may not be specified on global declaration of '%s'.
qac-0801 | [C] The '##' operator may not be the first token in a macro replacement list.
qac-0802 | [C] The '##' operator may not be the last token in a macro replacement list.
qac-0803 | [C] The '#' operator may only appear before a macro parameter.
qac-0804 | [C] Macro parameter '%s' is not unique.
qac-0811 | [C] The glue operator '##' may only appear in a '#define' preprocessing directive.
qac-0821 | [C] '#include' does not identify a header or source file that can be processed.
qac-0834 | [C] Function-like macro '%s()' is being redefined as an object-like macro.
qac-0835 | [C] Macro '%s' is being redefined with different parameter names.
qac-0844 | [C] Macro '%s' is being redefined with a different replacement list.
qac-0845 | [C] Object-like macro '%s' is being redefined as a function-like macro.
qac-0851 | [C] More arguments in macro call than specified in definition.
qac-0852 | [S] Unable to find the ')' that marks the end of the macro call.
qac-0866 | [C] The string literal in a '#line' directive cannot be a 'wide string literal'.
qac-0873 | [C] Preprocessing token cannot be converted to an actual token.
qac-0877 | [C] '#if' and '#elif' expressions may contain only integral constants.
qac-0940 | [C] Illegal usage of a variably modified type.
qac-0941 | [C] A variable length array may not be initialized.
qac-0943 | [C] Jump to label '%s' is a jump into the scope of an identifier with variably modified type.
qac-0944 | [C] The label '%s' is inside the scope of an identifier with variably modified type.
qac-1023 | [C] Using '_Alignof' on function types is illegal.
qac-1024 | [C] Using '_Alignof' on incomplete types is illegal.
qac-1025 | [C] Using '_Alignof' on bit-fields is illegal.
qac-1033 | [C] The identifier __VA_ARGS__ may only be used in the replacement list of a variadic macro.
qac-1047 | [EE] Function is being declared with default argument syntax after a previous call to the function. This is not allowed.
qac-1048 | [EE] Default argument values are missing for some parameters in this function declaration. This is not allowed.
qac-1050 | [EE] Nested functions cannot be 'extern' or 'static'.
qac-1061 | [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of structure member '%3s'.
qac-1062 | [C] Structure '%1s' with flexible array member '%2s' cannot be used in the declaration of array elements.
qac-3236 | [C] 'inline' may not be applied to function 'main'.
qac-3237 | [C] inline function '%1s' has external linkage and is defining an object, '%2s', with static storage duration.
qac-3238 | [C] inline function '%1s' has external linkage and is referring to an object, '%2s', with internal linkage.
qac-3244 | [C] 'inline' may only be used in the declaration of a function identifier.

MSC41

Rule

Never hard code sensitive information

Qac | Description
--- | ---
qac-3122 | Hard-coded 'magic' string literal, %1s.

POS30

Rule_Optional

Use the readlink() function properly

Qac | Description
--- | ---
certccm-5033 | '%s' is being used.

POS33

Rule_Optional

Do not use vfork()

Qac | Description
--- | ---
certccm-5023 | '%s' is being used.

POS34

Rule_Optional

Do not call putenv() with a pointer to an automatic variable as the argument

Qac | Description
--- | ---
certccm-5024 | '%s' is being used.

POS35

Rule_Optional

Avoid race conditions while checking for the existence of a symbolic link

Qac | Description
--- | ---
qac-4886 | Definite: Time-of-check time-of-use race condition when checking for the existence of a symbolic link.
qac-4887 | Apparent: Time-of-check time-of-use race condition when checking for the existence of a symbolic link.
qac-4888 | Suspicious: Time-of-check time-of-use race condition when checking for the existence of a symbolic link.

POS36

Rule_Optional

Observe correct revocation order while relinquishing privileges

Qac | Description
--- | ---
qac-4891 | Definite: Revocation order was not observed while relinquishing privileges.
qac-4892 | Apparent: Revocation order was not observed while relinquishing privileges.
qac-4893 | Suspicious: Revocation order was not observed while relinquishing privileges.

POS37

Rule_Optional

Ensure that privilege relinquishment is successful

Qac | Description
--- | ---
qac-4876 | Definite: Permanent user rights drop success is not checked.
qac-4877 | Apparent: Permanent user rights drop success is not checked.
qac-4878 | Suspicious: Permanent user rights drop success is not checked.

POS38

Rule_Optional

Beware of race conditions when using fork and file descriptors

Qac | Description
--- | ---
qac-4951 | Definite: Beware of race conditions when using fork and file descriptors.
qac-4952 | Apparent: Beware of race conditions when using fork and file descriptors.

POS39

Rule_Optional

Use the correct byte ordering when transferring data between systems

Qac | Description
--- | ---
qac-4906 | Definite: Data may not be correctly converted between host and network byte order.
qac-4907 | Apparent: Data may not be correctly converted between host and network byte order.
qac-4908 | Suspicious: Data may not be correctly converted between host and network byte order.

POS44

Rule_Optional

Do not use signals to terminate threads

Qac | Description
--- | ---
certccm-5034 | '%s' is being used.

POS47

Rule_Optional

Do not use threads that can be canceled asynchronously

Qac | Description
--- | ---
certccm-5035 | Asynchronous thread cancellation is used.

POS48

Rule_Optional

Do not unlock or destroy another POSIX thread's mutex

Qac | Description
--- | ---
qac-4971 | Definite: Attempt to destroy a mutex which has not been created by the current thread
qac-4972 | Apparent: Attempt to destroy a mutex which has not been created by the current thread
qac-4981 | Definite: Attempt to unlock a mutex which has not been locked by the current thread
qac-4982 | Apparent: Attempt to unlock a mutex which has not been locked by the current thread

POS49

Rule_Optional

When data must be accessed by multiple threads, provide a mutex and guarantee no adjacent data is also accessed

Qac | Description
--- | ---
mta-1774 | Definite: data race for an object '%1s' which shares its physical storage location with one or more others.
mta-1775 | Apparent: data race for an object '%1s' which shares its physical storage location with one or more others.

POS50

Rule_Optional

Declare objects shared between POSIX threads with appropriate storage durations

Qac | Description
--- | ---
qac-4926 | Definite: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.
qac-4927 | Apparent: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.
qac-4928 | Suspicious: The lifetime of the variable passed to the thread creation function is shorter than the lifetime of the thread.

POS51

Rule_Optional

Avoid deadlock with POSIX threads by locking in predefined order

Qac | Description
--- | ---
mta-1772 | Mutex '%1s' violates the lock hierarchy, as it is acquired before '%2s' elsewhere %3s% of the time.
mta-1773 | Mutexes '%1s' and '%2s' are not ordered in the lock hierarchy.

POS52

Rule_Optional

Do not perform operations that can block while holding a POSIX lock

Qac | Description
--- | ---
qac-4966 | Definite: Performing a blocking action while holding a POSIX lock.
qac-4967 | Apparent: Performing a blocking action while holding a POSIX lock.

POS53

Rule_Optional

Do not use more than one mutex for concurrent waiting operations on a condition variable

Qac | Description
--- | ---
mta-1769 | Condition variable '%1s' used with multiple mutexes.

POS54

Rule_Optional

Detect and handle POSIX library errors

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

PRE00

Recommendation

Prefer inline or static functions to function-like macros

Qac | Description
--- | ---
qac-3453 | A function could probably be used instead of this function-like macro.

PRE01

Recommendation

Use parentheses within macros around parameter names

Qac | Description
--- | ---
qac-3410 | Macro parameter not enclosed in ().

PRE02

Recommendation

Macro replacement lists should be parenthesized

Qac | Description
--- | ---
qac-3409 | The replacement list of function-like macro '%1s' is not enclosed in ().

PRE03

Recommendation

Prefer typedefs to defines for encoding non-pointer types

Qac | Description
--- | ---
qac-3413 | Macro definition could be replaced by a typedef.

PRE04

Recommendation

Do not reuse a standard header file name

Qac | Description
--- | ---
certccm-5001 | The header '%s' is a standard header file name.

PRE05

Recommendation

Understand macro replacement when concatenating tokens or performing stringification

Qac | Description
--- | ---
qac-0341 | Using the stringify operator '#'.
qac-0342 | Using the glue operator '##'.
qac-0801 | [C] The '##' operator may not be the first token in a macro replacement list.
qac-0802 | [C] The '##' operator may not be the last token in a macro replacement list.
qac-0803 | [C] The '#' operator may only appear before a macro parameter.
qac-0811 | [C] The glue operator '##' may only appear in a '#define' preprocessing directive.
qac-0872 | [U] Result of '##' operator is not a legal preprocessing token.
qac-0880 | Using # and ## operators in the same macro definition.
qac-0881 | Using multiple ## operators in the same macro definition.
qac-0884 | Using multiple # operators in the same macro definition.

PRE06

Recommendation

Enclose header files in an inclusion guard

Qac | Description
--- | ---
qac-0883 | Include file code is not protected against repeated inclusion

PRE07

Recommendation

Avoid using repeated question marks

Qac | Description
--- | ---
qac-3601 | Trigraphs (??x) are an ISO feature.

PRE08

Recommendation

Guarantee that header file names are unique

Qac | Description
--- | ---
certccm-5002 | The header '%s' file name shadows a previously included header.

PRE09

Recommendation

Do not replace secure functions with deprecated or obsolescent functions

Qac | Description
--- | ---
certccm-5003 | The obsolete function '%s' will be used as a result of this macro expansion

PRE10

Recommendation

Wrap multi-statement macros in a do-while loop

Qac | Description
--- | ---
qac-3412 | Macro defines an unrecognized code-fragment.
qac-3458 | Macro defines a braced code statement block.

PRE11

Recommendation

Do not conclude macro definitions with a semicolon

Qac | Description
--- | ---
qac-3412 | Macro defines an unrecognized code-fragment.

PRE12

Recommendation

Do not define unsafe macros

Qac | Description
--- | ---
qac-3456 | Parameter '%1s' will be evaluated more than once when this macro is used.

PRE30

Rule

Do not create a universal character name through concatenation

Qac | Description
--- | ---
qac-0905 | [U] Producing a universal character name through token concatenation is undefined.

PRE31

Rule

Avoid side effects in arguments to unsafe macros

Qac | Description
--- | ---
qac-3462 | Argument to macro '%s' appears to contain a side effect, but it is not used.
qac-3463 | Argument to macro '%s' contains a side effect that will not be evaluated at runtime.
qac-3464 | Argument to macro '%s' contains a side effect that will be evaluated more than once.
qac-3465 | Argument to macro '%s' contains a side effect that might not be evaluated at runtime.
qac-3466 | Variable argument list to macro '%s' appears to contain an expression with side effects.
qac-3467 | Variable argument list to macro '%s' appears to contain an expression with side effects that will be used more than once.

PRE32

Rule

Do not use preprocessor directives in invocations of function-like macros

Qac | Description
--- | ---
qac-0853 | [U] Macro arguments contain a sequence of tokens that has the form of a preprocessing directive.

SIG00

Recommendation

Mask signals handled by noninterruptible signal handlers

Qac | Description
--- | ---
certccm-5019 | '%s' is being used.

SIG01

Recommendation

Understand implementation-specific details regarding signal handler persistence

Qac | Description
--- | ---
certccm-5020 | '%s' is being used.

SIG30

Rule

Call only asynchronous-safe functions within signal handlers

Qac | Description
--- | ---
qac-2028 | Signal handler '%1s' calls async-unsafe functions.
qac-2030 | The signal handler passed here might not be async-safe.

SIG31

Rule

Do not access shared objects in signal handlers

Qac | Description
--- | ---
qac-2029 | Signal handler '%1s' accesses shared objects.
qac-2030 | The signal handler passed here might not be async-safe.

SIG34

Rule

Do not call signal() from within interruptible signal handlers

Qac | Description
--- | ---
certccm-5021 | '%s' is being used.

SIG35

Rule

Do not return from a computational exception signal handler

Qac | Description
--- | ---
qac-4846 | Definite: Signal handler returns from a computational exception.
qac-4847 | Apparent: Signal handler returns from a computational exception.
qac-4848 | Suspicious: Signal handler returns from a computational exception.

STR04

Recommendation

Use plain char for characters in the basic character set

Qac | Description
--- | ---
qac-0432 | [C] Function argument is not of compatible pointer type.
qac-0674 | [C] Initializer for pointer is of incompatible type.
qac-0699 | [C] String literal used to initialize a pointer of incompatible type.

STR05

Recommendation

Use pointers to const when referring to string literals

Qac | Description
--- | ---
qac-0752 | String literal passed as argument to function whose parameter is not a 'pointer to const'.
qac-0753 | String literal assigned to pointer which is not a 'pointer to const'.

STR06

Recommendation

Do not assume that strtok() leaves the parse string unchanged

Qac | Description
--- | ---
certccm-5007 | '%s' is being used.

STR07

Recommendation

Use the bounds-checking interfaces for string manipulation

Qac | Description
--- | ---
certccm-5008 | '%s' is being used.

STR09

Recommendation

Don't assume numeric values for expressions with type plain character

Qac | Description
--- | ---
qac-2106 | Integral promotion : plain char promoted to signed int.
qac-2107 | Integral promotion : plain char promoted to unsigned int.

STR10

Recommendation

Do not concatenate different type of string literals

Qac | Description
--- | ---
qac-0874 | [U] Character string literal and wide character string literal are adjacent.

STR11

Recommendation

Do not specify the bound of a character array initialized with a string literal

Qac | Description
--- | ---
qac-1312 | The array being initialized is not large enough to hold a terminating null byte for the string initializer.

STR30

Rule

Do not attempt to modify string literals

Qac | Description
--- | ---
qac-0556 | [C] Left operand of assignment must be a modifiable object.
qac-0752 | String literal passed as argument to function whose parameter is not a 'pointer to const'.
qac-0753 | String literal assigned to pointer which is not a 'pointer to const'.
qac-0754 | [U] String literal is being modified.

STR31

Rule

Guarantee that storage for strings has sufficient space for character data and the null terminator

Qac | Description
--- | ---
qac-2840 | Constant: Dereference of an invalid pointer value.
qac-2841 | Definite: Dereference of an invalid pointer value.
qac-2842 | Apparent: Dereference of an invalid pointer value.
qac-2843 | Suspicious: Dereference of an invalid pointer value.
qac-2845 | Constant: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2846 | Definite: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2847 | Apparent: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2848 | Suspicious: Maximum number of characters to be read/written is larger than the target buffer size.
qac-2930 | Constant: Computing an invalid pointer value.
qac-2931 | Definite: Computing an invalid pointer value.
qac-2932 | Apparent: Computing an invalid pointer value.
qac-2933 | Suspicious: Computing an invalid pointer value.
qac-2935 | Constant: Dereference of an invalid char pointer value.
qac-2936 | Definite: Dereference of an invalid char pointer value.
qac-2937 | Apparent: Dereference of an invalid char pointer value.
qac-2938 | Suspicious: Dereference of an invalid char pointer value.
certccm-5009 | '%s' is being used.
certccm-5038 | '%s' is being used.

STR32

Rule

Do not pass a non-null-terminated character sequence to a library function that expects a string

Qac | Description
--- | ---
qac-2835 | Constant: Non-null terminated string used in a string function.
qac-2836 | Definite: Non-null terminated string used in a string function.
qac-2839 | Possible: Non-null terminated string used in a string function.

STR34

Rule

Cast characters to unsigned char before converting to larger integer sizes

Qac | Description
--- | ---
qac-2140 | Implicit conversion from plain char to wider signed integer type.
qac-2141 | Implicit conversion from plain char to wider unsigned integer type.
qac-2143 | Implicit conversion from plain char to enum type.
qac-2144 | Implicit conversion from signed char to wider signed integer type.
qac-2145 | Implicit conversion from signed char to wider unsigned integer type.
qac-2147 | Implicit conversion from signed char to enum type.
qac-2148 | Explicit conversion from plain char to wider signed integer type.
qac-2149 | Explicit conversion from plain char to wider unsigned integer type.
qac-2151 | Explicit conversion from plain char to enum type.
qac-2152 | Explicit conversion from signed char to wider signed integer type.
qac-2153 | Explicit conversion from signed char to wider unsigned integer type.
qac-2155 | Explicit conversion from signed char to enum type.

STR37

Rule

Arguments to character-handling functions must be representable as an unsigned char

Qac | Description
--- | ---
qac-4413 | An expression of 'essentially character' type (%1s) is being converted to signed type, '%2s' on assignment.
qac-4414 | An expression of 'essentially character' type (%1s) is being converted to unsigned type, '%2s' on assignment.

STR38

Rule

Do not confuse narrow and wide character strings and functions

Qac | Description
--- | ---
qac-0432 | [C] Function argument is not of compatible pointer type.

## GRP - Guideline Recategorization Plan

This section targets to provide an overview of Guidelines Recategorization Plan.

Guideline | Description | Category | Revised Category
--- | --- | --- | ---
ARR02 | Explicitly specify array bounds, even if implicitly defined by an initializer | Recommendation | Recommendation
ARR30 | Do not form or use out-of-bounds pointers or array subscripts | Rule | Rule
ARR32 | Ensure size arguments for variable length arrays are in a valid range | Rule | Rule
ARR36 | Do not subtract or compare two pointers that do not refer to the same array | Rule | Rule
ARR37 | Do not add or subtract an integer to a pointer to a non-array object | Rule | Rule
ARR38 | Guarantee that library functions do not form invalid pointers | Rule | Rule
ARR39 | Do not add or subtract a scaled integer to a pointer | Rule | Rule
CON30 | Clean up thread-specific storage | Rule | Rule
CON31 | Do not destroy a mutex while it is locked | Rule | Rule
CON32 | Prevent data races when accessing bit-fields from multiple threads | Rule | Rule
CON33 | Avoid race conditions when using library functions | Rule | Rule
CON34 | Declare objects shared between threads with appropriate storage durations | Rule | Rule
CON35 | Avoid deadlock by locking in a predefined order | Rule | Rule
CON36 | Wrap functions that can spuriously wake up in a loop | Rule | Rule
CON37 | Do not call signal() in a multithreaded program | Rule | Rule
CON38 | Preserve thread safety and liveness when using condition variables | Rule | Rule
CON39 | Do not join or detach a thread that was previously joined or detached | Rule | Rule
CON40 | Do not refer to an atomic variable twice in an expression | Rule | Rule
CON41 | Wrap functions that can fail spuriously in a loop | Rule | Rule
CON43 | Do not allow data races in multithreaded code | Rule | Rule
DCL00 | Const-qualify immutable objects | Recommendation | Recommendation
DCL01 | Do not reuse variable names in subscopes | Recommendation | Recommendation
DCL05 | Use typedefs of non-pointer types only | Recommendation | Disapplied
DCL06 | Use meaningful symbolic constants to represent literal values | Recommendation | Recommendation
DCL07 | Include the appropriate type information in function declarators | Recommendation | Recommendation
DCL10 | Maintain the contract between the writer and caller of variadic functions | Recommendation | Recommendation
DCL11 | Understand the type issues associated with variadic functions | Recommendation | Recommendation
DCL13 | Declare function parameters that are pointers to values not changed by the function as const | Recommendation | Recommendation
DCL15 | Declare file-scope objects or functions that do not need external linkage as static | Recommendation | Recommendation
DCL16 | Use 'L', not 'l', to indicate a long value | Recommendation | Recommendation
DCL18 | Do not begin integer constants with 0 when specifying a decimal value | Recommendation | Recommendation
DCL19 | Minimize the scope of variables and functions | Recommendation | Recommendation
DCL20 | Explicitly specify void when a function accepts no arguments | Recommendation | Recommendation
DCL21 | Understand the storage of compound literals | Recommendation | Recommendation
DCL23 | Guarantee that mutually visible identifiers are unique | Recommendation | Recommendation
DCL30 | Declare objects with appropriate storage durations | Rule | Rule
DCL31 | Declare identifiers before using them | Rule | Rule
DCL36 | Do not declare an identifier with conflicting linkage classifications | Rule | Rule
DCL37 | Do not declare or define a reserved identifier | Rule | Rule
DCL38 | Use the correct syntax when declaring a flexible array member | Rule | Rule
DCL39 | Avoid information leakage when passing a structure across a trust boundary | Rule | Rule
DCL40 | Do not create incompatible declarations of the same function or object | Rule | Rule
DCL41 | Do not declare variables inside a switch statement before the first case label | Rule | Rule
ENV03 | Sanitize the environment when invoking external programs | Recommendation | Recommendation
ENV30 | Do not modify the object referenced by the return value of certain functions | Rule | Rule
ENV31 | Do not rely on an environment pointer following an operation that may invalidate it | Rule | Rule
ENV32 | All exit handlers must return normally | Rule | Rule
ENV33 | Do not call system() | Rule | Rule
ENV34 | Do not store pointers returned by certain functions | Rule | Rule
ERR30 | 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 | Rule | Rule
ERR32 | Do not rely on indeterminate values of errno | Rule | Rule
ERR33 | Detect and handle standard library errors | Rule | Disapplied
ERR34 | Detect errors when converting a string to a number | Rule | Rule
EXP00 | Use parentheses for precedence of operation | Recommendation | Recommendation
EXP02 | Be aware of the short-circuit behavior of the logical AND and OR operators | Recommendation | Recommendation
EXP03 | Do not assume the size of a structure is the sum of the sizes of its members | Recommendation | Recommendation
EXP05 | Do not cast away a const qualification | Recommendation | Recommendation
EXP07 | Do not diminish the benefits of constants by assuming their values in expressions | Recommendation | Recommendation
EXP08 | Ensure pointer arithmetic is used correctly | Recommendation | Recommendation
EXP10 | Do not depend on the order of evaluation of subexpressions or the order in which side effects take place | Recommendation | Recommendation
EXP11 | Do not make assumptions regarding the layout of structures with bit-fields | Recommendation | Recommendation
EXP12 | Do not ignore values returned by functions | Recommendation | Disapplied
EXP13 | Treat relational and equality operators as if they were nonassociative | Recommendation | Recommendation
EXP15 | Do not place a semicolon on the same line as an if, for, or while statement | Recommendation | Disapplied
EXP16 | Do not compare function pointers to constant values | Recommendation | Recommendation
EXP19 | Use braces for the body of an if, for, or while statement | Recommendation | Recommendation
EXP20 | Perform explicit tests to determine success, true and false, and equality | Recommendation | Recommendation
EXP30 | Do not depend on the order of evaluation for side effects | Rule | Rule
EXP32 | Do not access a volatile object through a nonvolatile reference | Rule | Rule
EXP33 | Do not read uninitialized memory | Rule | Rule
EXP34 | Do not dereference null pointers | Rule | Rule
EXP35 | Do not modify objects with temporary lifetime | Rule | Rule
EXP36 | Do not cast pointers into more strictly aligned pointer types | Rule | Rule
EXP37 | Call functions with the correct number and type of arguments | Rule | Rule
EXP39 | Do not access a variable through a pointer of an incompatible type | Rule | Rule
EXP40 | Do not modify constant objects | Rule | Rule
EXP42 | Do not compare padding data | Rule | Rule
EXP43 | Avoid undefined behavior when using restrict-qualified pointers | Rule | Rule
EXP44 | Do not rely on side effects in operands to sizeof, _Alignof, or _Generic | Rule | Rule
EXP45 | Do not perform assignments in selection statements | Rule | Rule
EXP46 | Do not use a bitwise operator with a Boolean-like operand | Rule | Rule
EXP47 | Do not call va_arg with an argument of the incorrect type | Rule | Rule
FIO01 | Be careful using functions that use file names for identification | Recommendation | Recommendation
FIO03 | Do not make assumptions about fopen() and file creation | Recommendation | Recommendation
FIO06 | Create files with appropriate access permissions | Recommendation | Recommendation
FIO08 | Take care when calling remove() on an open file | Recommendation | Recommendation
FIO10 | Take care when using the rename() function | Recommendation | Recommendation
FIO21 | Do not create temporary files in shared directories | Recommendation | Recommendation
FIO30 | Exclude user input from format strings | Rule | Rule
FIO32 | Do not perform operations on devices that are only appropriate for files | Rule | Rule
FIO34 | Distinguish between characters read from a file and EOF or WEOF | Rule | Rule
FIO37 | Do not assume that fgets() or fgetws() returns a nonempty string when successful | Rule | Rule
FIO38 | Do not copy a FILE object | Rule | Rule
FIO39 | Do not alternately input and output from a stream without an intervening flush or positioning call | Rule | Rule
FIO40 | Reset strings on fgets() or fgetws() failure | Rule | Rule
FIO41 | Do not call getc(), putc(), getwc(), or putwc() with a stream argument that has side effects | Rule | Rule
FIO42 | Close files when they are no longer needed | Rule | Rule
FIO44 | Only use values for fsetpos() that are returned from fgetpos() | Rule | Rule
FIO45 | Avoid TOCTOU race conditions while accessing files | Rule | Rule
FIO46 | Do not access a closed file | Rule | Rule
FIO47 | Use valid format strings | Rule | Rule
FLP02 | Avoid using floating-point numbers when precise computation is needed | Recommendation | Recommendation
FLP06 | Convert integers to floating point for floating point operations | Recommendation | Recommendation
FLP30 | Do not use floating-point variables as loop counters | Rule | Rule
FLP32 | Prevent or detect domain and range errors in math functions | Rule | Rule
FLP34 | Ensure that floating-point conversions are within range of the new type | Rule | Rule
FLP36 | Preserve precision when converting integral values to floating-point type | Rule | Rule
FLP37 | Do not use object representations to compare floating-point values | Rule | Rule
INT02 | Understand integer conversion rules | Recommendation | Recommendation
INT04 | Enforce limits on integer values originating from tainted sources | Recommendation | Recommendation
INT05 | Do not use input functions to convert character data if they cannot handle all possible inputs | Recommendation | Recommendation
INT07 | Use only explicitly signed or unsigned char type for numeric values | Recommendation | Recommendation
INT08 | Verify that all integer values are in range | Recommendation | Recommendation
INT09 | Ensure enumeration constants map to unique values | Recommendation | Recommendation
INT10 | Do not assume a positive remainder when using the % operator | Recommendation | Recommendation
INT12 | Do not make assumptions about the type of a plain int bit-field when used in an expression | Recommendation | Recommendation
INT13 | Use bitwise operators only on unsigned operands | Recommendation | Recommendation
INT16 | Do not make assumptions about representation of signed integers | Recommendation | Recommendation
INT18 | Evaluate integer expressions in a larger size before comparing or assigning to that size | Recommendation | Recommendation
INT30 | Ensure that unsigned integer operations do not wrap | Rule | Rule
INT31 | Ensure that integer conversions do not result in lost or misinterpreted data | Rule | Rule
INT32 | Ensure that operations on signed integers do not result in overflow | Rule | Rule
INT33 | Ensure that division and remainder operations do not result in divide-by-zero errors | Rule | Rule
INT34 | 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 | Rule | Rule
INT35 | Use correct integer precisions | Rule | Rule
INT36 | Converting a pointer to integer or integer to pointer | Rule | Rule
MEM02 | Immediately cast the result of a memory allocation function call into a pointer to the allocated type | Recommendation | Recommendation
MEM03 | Clear sensitive information stored in reusable resources | Recommendation | Recommendation
MEM05 | Avoid large stack allocations | Recommendation | Recommendation
MEM30 | Do not access freed memory | Rule | Rule
MEM31 | Free dynamically allocated memory when no longer needed | Rule | Rule
MEM33 | Allocate and copy structures containing a flexible array member dynamically | Rule | Rule
MEM34 | Only free memory allocated dynamically | Rule | Rule
MEM35 | Allocate sufficient memory for an object | Rule | Rule
MEM36 | Do not modify the alignment of objects by calling realloc() | Rule | Rule
MSC01 | Strive for logical completeness | Recommendation | Recommendation
MSC04 | Use comments consistently and in a readable fashion | Recommendation | Recommendation
MSC07 | Detect and remove dead code | Recommendation | Recommendation
MSC09 | Character encoding: Use subset of ASCII for safety | Recommendation | Recommendation
MSC12 | Detect and remove code that has no effect or is never executed | Recommendation | Recommendation
MSC13 | Detect and remove unused values | Recommendation | Recommendation
MSC14 | Do not introduce unnecessary platform dependencies | Recommendation | Recommendation
MSC15 | Do not depend on undefined behavior | Recommendation | Recommendation
MSC17 | Finish every set of statements associated with a case label with a break statement | Recommendation | Recommendation
MSC20 | Do not use a switch statement to transfer control into a complex block | Recommendation | Recommendation
MSC30 | Do not use the rand() function for generating pseudorandom numbers | Rule | Rule
MSC32 | Properly seed pseudorandom number generators | Rule | Rule
MSC33 | Do not pass invalid data to the asctime() function | Rule | Rule
MSC37 | Ensure that control never reaches the end of a non-void function | Rule | Rule
MSC38 | Do not treat a predefined identifier as an object if it might only be implemented as a macro | Rule | Rule
MSC39 | Do not call va_arg() on a va_list that has an indeterminate value | Rule | Rule
MSC40 | Do not violate constraints | Rule | Rule
MSC41 | Never hard code sensitive information | Rule | Rule
POS30 | Use the readlink() function properly | Rule_Optional | Rule_Optional
POS33 | Do not use vfork() | Rule_Optional | Rule_Optional
POS34 | Do not call putenv() with a pointer to an automatic variable as the argument | Rule_Optional | Rule_Optional
POS35 | Avoid race conditions while checking for the existence of a symbolic link | Rule_Optional | Rule_Optional
POS36 | Observe correct revocation order while relinquishing privileges | Rule_Optional | Rule_Optional
POS37 | Ensure that privilege relinquishment is successful | Rule_Optional | Rule_Optional
POS38 | Beware of race conditions when using fork and file descriptors | Rule_Optional | Rule_Optional
POS39 | Use the correct byte ordering when transferring data between systems | Rule_Optional | Rule_Optional
POS44 | Do not use signals to terminate threads | Rule_Optional | Rule_Optional
POS47 | Do not use threads that can be canceled asynchronously | Rule_Optional | Rule_Optional
POS48 | Do not unlock or destroy another POSIX thread's mutex | Rule_Optional | Rule_Optional
POS49 | When data must be accessed by multiple threads, provide a mutex and guarantee no adjacent data is also accessed | Rule_Optional | Rule_Optional
POS50 | Declare objects shared between POSIX threads with appropriate storage durations | Rule_Optional | Rule_Optional
POS51 | Avoid deadlock with POSIX threads by locking in predefined order | Rule_Optional | Rule_Optional
POS52 | Do not perform operations that can block while holding a POSIX lock | Rule_Optional | Rule_Optional
POS53 | Do not use more than one mutex for concurrent waiting operations on a condition variable | Rule_Optional | Rule_Optional
POS54 | Detect and handle POSIX library errors | Rule_Optional | Disapplied
PRE00 | Prefer inline or static functions to function-like macros | Recommendation | Disapplied
PRE01 | Use parentheses within macros around parameter names | Recommendation | Recommendation
PRE02 | Macro replacement lists should be parenthesized | Recommendation | Recommendation
PRE03 | Prefer typedefs to defines for encoding non-pointer types | Recommendation | Recommendation
PRE04 | Do not reuse a standard header file name | Recommendation | Recommendation
PRE05 | Understand macro replacement when concatenating tokens or performing stringification | Recommendation | Recommendation
PRE06 | Enclose header files in an inclusion guard | Recommendation | Recommendation
PRE07 | Avoid using repeated question marks | Recommendation | Recommendation
PRE08 | Guarantee that header file names are unique | Recommendation | Disapplied
PRE09 | Do not replace secure functions with deprecated or obsolescent functions | Recommendation | Recommendation
PRE10 | Wrap multi-statement macros in a do-while loop | Recommendation | Recommendation
PRE11 | Do not conclude macro definitions with a semicolon | Recommendation | Disapplied
PRE12 | Do not define unsafe macros | Recommendation | Disapplied
PRE30 | Do not create a universal character name through concatenation | Rule | Rule
PRE31 | Avoid side effects in arguments to unsafe macros | Rule | Rule
PRE32 | Do not use preprocessor directives in invocations of function-like macros | Rule | Rule
SIG00 | Mask signals handled by noninterruptible signal handlers | Recommendation | Recommendation
SIG01 | Understand implementation-specific details regarding signal handler persistence | Recommendation | Recommendation
SIG30 | Call only asynchronous-safe functions within signal handlers | Rule | Rule
SIG31 | Do not access shared objects in signal handlers | Rule | Rule
SIG34 | Do not call signal() from within interruptible signal handlers | Rule | Rule
SIG35 | Do not return from a computational exception signal handler | Rule | Rule
STR04 | Use plain char for characters in the basic character set | Recommendation | Recommendation
STR05 | Use pointers to const when referring to string literals | Recommendation | Recommendation
STR06 | Do not assume that strtok() leaves the parse string unchanged | Recommendation | Recommendation
STR07 | Use the bounds-checking interfaces for string manipulation | Recommendation | Recommendation
STR09 | Don't assume numeric values for expressions with type plain character | Recommendation | Recommendation
STR10 | Do not concatenate different type of string literals | Recommendation | Recommendation
STR11 | Do not specify the bound of a character array initialized with a string literal | Recommendation | Recommendation
STR30 | Do not attempt to modify string literals | Rule | Rule
STR31 | Guarantee that storage for strings has sufficient space for character data and the null terminator | Rule | Rule
STR32 | Do not pass a non-null-terminated character sequence to a library function that expects a string | Rule | Rule
STR34 | Cast characters to unsigned char before converting to larger integer sizes | Rule | Rule
STR37 | Arguments to character-handling functions must be representable as an unsigned char | Rule | Rule
STR38 | Do not confuse narrow and wide character strings and functions | Rule | Rule

## GCS - Guideline Compliance Summary

This section targets to provide an overview of Guidelines Compliance Summary.

Guideline | Category | Description | Compliance
--- | --- | --- | ---
ARR02 | Recommendation | Explicitly specify array bounds, even if implicitly defined by an initializer | Compliant
ARR30 | Rule | Do not form or use out-of-bounds pointers or array subscripts | Compliant
ARR32 | Rule | Ensure size arguments for variable length arrays are in a valid range | Compliant
ARR36 | Rule | Do not subtract or compare two pointers that do not refer to the same array | Compliant
ARR37 | Rule | Do not add or subtract an integer to a pointer to a non-array object | Compliant
ARR38 | Rule | Guarantee that library functions do not form invalid pointers | Compliant
ARR39 | Rule | Do not add or subtract a scaled integer to a pointer | Compliant
CON30 | Rule | Clean up thread-specific storage | Compliant
CON31 | Rule | Do not destroy a mutex while it is locked | Compliant
CON32 | Rule | Prevent data races when accessing bit-fields from multiple threads | Compliant
CON33 | Rule | Avoid race conditions when using library functions | Compliant
CON34 | Rule | Declare objects shared between threads with appropriate storage durations | Compliant
CON35 | Rule | Avoid deadlock by locking in a predefined order | Compliant
CON36 | Rule | Wrap functions that can spuriously wake up in a loop | Compliant
CON37 | Rule | Do not call signal() in a multithreaded program | Compliant
CON38 | Rule | Preserve thread safety and liveness when using condition variables | Compliant
CON39 | Rule | Do not join or detach a thread that was previously joined or detached | Compliant
CON40 | Rule | Do not refer to an atomic variable twice in an expression | Compliant
CON41 | Rule | Wrap functions that can fail spuriously in a loop | Compliant
CON43 | Rule | Do not allow data races in multithreaded code | Compliant

DCL00

Recommendation

Const-qualify immutable objects

Compliant with deviations:

Qac | Description
--- | ---
qac-3204 | The variable '%s' is only set once and so it could be declared with the 'const' qualifier.
qac-3227 | The parameter '%s' is never modified and so it could be declared with the 'const' qualifier.

DCL01 | Recommendation | Do not reuse variable names in subscopes | Compliant
DCL05 | Recommendation | Use typedefs of non-pointer types only | Disapplied

DCL06

Recommendation

Use meaningful symbolic constants to represent literal values

Compliant with deviations:

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

DCL07

Recommendation

Include the appropriate type information in function declarators

Compliant with deviations:

Qac | Description
--- | ---
qac-3450 | Function '%s', with internal linkage, is being defined without a previous declaration.

DCL10 | Recommendation | Maintain the contract between the writer and caller of variadic functions | Compliant
DCL11 | Recommendation | Understand the type issues associated with variadic functions | Compliant
DCL13 | Recommendation | Declare function parameters that are pointers to values not changed by the function as const | Compliant
DCL15 | Recommendation | Declare file-scope objects or functions that do not need external linkage as static | Compliant
DCL16 | Recommendation | Use 'L', not 'l', to indicate a long value | Compliant
DCL18 | Recommendation | Do not begin integer constants with 0 when specifying a decimal value | Compliant

DCL19

Recommendation

Minimize the scope of variables and functions

Compliant with deviations:

Qac | Description
--- | ---
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
rcma-1505 | The function '%1s' is only referenced in the translation unit where it is defined.
rcma-1532 | The function '%1s' is only referenced in one translation unit - but not the one in which it is defined.

DCL20 | Recommendation | Explicitly specify void when a function accepts no arguments | Compliant
DCL21 | Recommendation | Understand the storage of compound literals | Compliant

DCL23

Recommendation

Guarantee that mutually visible identifiers are unique

Compliant with deviations:

Qac | Description
--- | ---
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.

DCL30 | Rule | Declare objects with appropriate storage durations | Compliant
DCL31 | Rule | Declare identifiers before using them | Compliant
DCL36 | Rule | Do not declare an identifier with conflicting linkage classifications | Compliant
DCL37 | Rule | Do not declare or define a reserved identifier | Compliant
DCL38 | Rule | Use the correct syntax when declaring a flexible array member | Compliant
DCL39 | Rule | Avoid information leakage when passing a structure across a trust boundary | Compliant

DCL40

Rule

Do not create incompatible declarations of the same function or object

Compliant with deviations:

Qac | Description
--- | ---
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.

DCL41 | Rule | Do not declare variables inside a switch statement before the first case label | Compliant
ENV03 | Recommendation | Sanitize the environment when invoking external programs | Compliant
ENV30 | Rule | Do not modify the object referenced by the return value of certain functions | Compliant
ENV31 | Rule | Do not rely on an environment pointer following an operation that may invalidate it | Compliant
ENV32 | Rule | All exit handlers must return normally | Compliant
ENV33 | Rule | Do not call system() | Compliant
ENV34 | Rule | Do not store pointers returned by certain functions | Compliant
ERR30 | Rule | 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 | Compliant
ERR32 | Rule | Do not rely on indeterminate values of errno | Compliant
ERR33 | Rule | Detect and handle standard library errors | Disapplied
ERR34 | Rule | Detect errors when converting a string to a number | Compliant
EXP00 | Recommendation | Use parentheses for precedence of operation | Compliant
EXP02 | Recommendation | Be aware of the short-circuit behavior of the logical AND and OR operators | Compliant
EXP03 | Recommendation | Do not assume the size of a structure is the sum of the sizes of its members | Compliant
EXP05 | Recommendation | Do not cast away a const qualification | Compliant

EXP07

Recommendation

Do not diminish the benefits of constants by assuming their values in expressions

Compliant with deviations:

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

EXP08 | Recommendation | Ensure pointer arithmetic is used correctly | Compliant
EXP10 | Recommendation | Do not depend on the order of evaluation of subexpressions or the order in which side effects take place | Compliant

EXP11

Recommendation

Do not make assumptions regarding the layout of structures with bit-fields

Compliant with deviations:

Qac | Description
--- | ---
qac-0751 | Casting to char pointer type.

EXP12 | Recommendation | Do not ignore values returned by functions | Disapplied
EXP13 | Recommendation | Treat relational and equality operators as if they were nonassociative | Compliant
EXP15 | Recommendation | Do not place a semicolon on the same line as an if, for, or while statement | Disapplied
EXP16 | Recommendation | Do not compare function pointers to constant values | Compliant
EXP19 | Recommendation | Use braces for the body of an if, for, or while statement | Compliant
EXP20 | Recommendation | Perform explicit tests to determine success, true and false, and equality | Compliant
EXP30 | Rule | Do not depend on the order of evaluation for side effects | Compliant
EXP32 | Rule | Do not access a volatile object through a nonvolatile reference | Compliant
EXP33 | Rule | Do not read uninitialized memory | Compliant
EXP34 | Rule | Do not dereference null pointers | Compliant
EXP35 | Rule | Do not modify objects with temporary lifetime | Compliant
EXP36 | Rule | Do not cast pointers into more strictly aligned pointer types | Compliant
EXP37 | Rule | Call functions with the correct number and type of arguments | Compliant

EXP39

Rule

Do not access a variable through a pointer of an incompatible type

Compliant with deviations:

Qac | Description
--- | ---
qac-0751 | Casting to char pointer type.

EXP40 | Rule | Do not modify constant objects | Compliant
EXP42 | Rule | Do not compare padding data | Compliant
EXP43 | Rule | Avoid undefined behavior when using restrict-qualified pointers | Compliant
EXP44 | Rule | Do not rely on side effects in operands to sizeof, _Alignof, or _Generic | Compliant

EXP45

Rule

Do not perform assignments in selection statements

Compliant with deviations:

Qac | Description
--- | ---
qac-3416 | Logical operation performed on expression with persistent side effects.

EXP46 | Rule | Do not use a bitwise operator with a Boolean-like operand | Compliant
EXP47 | Rule | Do not call va_arg with an argument of the incorrect type | Compliant
FIO01 | Recommendation | Be careful using functions that use file names for identification | Compliant
FIO03 | Recommendation | Do not make assumptions about fopen() and file creation | Compliant
FIO06 | Recommendation | Create files with appropriate access permissions | Compliant
FIO08 | Recommendation | Take care when calling remove() on an open file | Compliant
FIO10 | Recommendation | Take care when using the rename() function | Compliant
FIO21 | Recommendation | Do not create temporary files in shared directories | Compliant
FIO30 | Rule | Exclude user input from format strings | Compliant
FIO32 | Rule | Do not perform operations on devices that are only appropriate for files | Compliant
FIO34 | Rule | Distinguish between characters read from a file and EOF or WEOF | Compliant
FIO37 | Rule | Do not assume that fgets() or fgetws() returns a nonempty string when successful | Compliant
FIO38 | Rule | Do not copy a FILE object | Compliant
FIO39 | Rule | Do not alternately input and output from a stream without an intervening flush or positioning call | Compliant
FIO40 | Rule | Reset strings on fgets() or fgetws() failure | Compliant
FIO41 | Rule | Do not call getc(), putc(), getwc(), or putwc() with a stream argument that has side effects | Compliant
FIO42 | Rule | Close files when they are no longer needed | Compliant
FIO44 | Rule | Only use values for fsetpos() that are returned from fgetpos() | Compliant
FIO45 | Rule | Avoid TOCTOU race conditions while accessing files | Compliant
FIO46 | Rule | Do not access a closed file | Compliant
FIO47 | Rule | Use valid format strings | Compliant
FLP02 | Recommendation | Avoid using floating-point numbers when precise computation is needed | Compliant
FLP06 | Recommendation | Convert integers to floating point for floating point operations | Compliant
FLP30 | Rule | Do not use floating-point variables as loop counters | Compliant
FLP32 | Rule | Prevent or detect domain and range errors in math functions | Compliant
FLP34 | Rule | Ensure that floating-point conversions are within range of the new type | Compliant
FLP36 | Rule | Preserve precision when converting integral values to floating-point type | Compliant
FLP37 | Rule | Do not use object representations to compare floating-point values | Compliant

INT02

Recommendation

Understand integer conversion rules

Compliant with deviations:

Qac | Description
--- | ---
qac-1251 | Suffixed integer constant causes implicit conversion of other operand.
qac-1290 | An integer constant of 'essentially signed' type is being converted to unsigned type on assignment.
qac-2100 | Integral promotion : unsigned char promoted to signed int.
qac-2101 | Integral promotion : unsigned short promoted to signed int.
qac-2105 | Integral promotion : signed short promoted to signed int.
qac-2109 | Integral promotion : _Bool promoted to signed int.
qac-4471 | A non-constant expression of 'essentially unsigned' type (%1s) is being passed to a function parameter of wider unsigned type, '%2s'.

INT04 | Recommendation | Enforce limits on integer values originating from tainted sources | Compliant
INT05 | Recommendation | Do not use input functions to convert character data if they cannot handle all possible inputs | Compliant
INT07 | Recommendation | Use only explicitly signed or unsigned char type for numeric values | Compliant
INT08 | Recommendation | Verify that all integer values are in range | Compliant
INT09 | Recommendation | Ensure enumeration constants map to unique values | Compliant
INT10 | Recommendation | Do not assume a positive remainder when using the % operator | Compliant
INT12 | Recommendation | Do not make assumptions about the type of a plain int bit-field when used in an expression | Compliant

INT13

Recommendation

Use bitwise operators only on unsigned operands

Compliant with deviations:

Qac | Description
--- | ---
qac-4544 | A non-negative constant expression of 'essentially signed' type (%1s) is being used as the right-hand operand of this shift operator (%2s).

INT16 | Recommendation | Do not make assumptions about representation of signed integers | Compliant
INT18 | Recommendation | Evaluate integer expressions in a larger size before comparing or assigning to that size | Compliant

INT30

Rule

Ensure that unsigned integer operations do not wrap

Compliant with deviations:

Qac | Description
--- | ---
qac-3383 | Cannot identify wraparound guard for unsigned arithmetic expression.
qac-3384 | Cannot identify wraparound guard for dependent unsigned arithmetic expression.

INT31 | Rule | Ensure that integer conversions do not result in lost or misinterpreted data | Compliant
INT32 | Rule | Ensure that operations on signed integers do not result in overflow | Compliant
INT33 | Rule | Ensure that division and remainder operations do not result in divide-by-zero errors | Compliant
INT34 | Rule | 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 | Compliant
INT35 | Rule | Use correct integer precisions | Compliant

INT36

Rule

Converting a pointer to integer or integer to pointer

Compliant with deviations:

Qac | Description
--- | ---
qac-0306 | [I] Cast between a pointer to object and an integral type.

MEM02 | Recommendation | Immediately cast the result of a memory allocation function call into a pointer to the allocated type | Compliant
MEM03 | Recommendation | Clear sensitive information stored in reusable resources | Compliant
MEM05 | Recommendation | Avoid large stack allocations | Compliant
MEM30 | Rule | Do not access freed memory | Compliant
MEM31 | Rule | Free dynamically allocated memory when no longer needed | Compliant
MEM33 | Rule | Allocate and copy structures containing a flexible array member dynamically | Compliant
MEM34 | Rule | Only free memory allocated dynamically | Compliant
MEM35 | Rule | Allocate sufficient memory for an object | Compliant
MEM36 | Rule | Do not modify the alignment of objects by calling realloc() | Compliant

MSC01

Recommendation

Strive for logical completeness

Compliant with deviations:

Qac | Description
--- | ---
qac-2000 | No 'else' clause exists for this 'if' statement.

MSC04 | Recommendation | Use comments consistently and in a readable fashion | Compliant

MSC07

Recommendation

Detect and remove dead code

Compliant with deviations:

Qac | Description
--- | ---
qac-2881 | The code in this 'default' clause is unreachable.
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3205 | The identifier '%1s' is not used and could be removed.
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
rcma-1503 | The function '%1s' is defined but is not used within this project.

MSC09 | Recommendation | Character encoding: Use subset of ASCII for safety | Compliant
MSC12 | Recommendation | Detect and remove code that has no effect or is never executed | Compliant

MSC13

Recommendation

Detect and remove unused values

Compliant with deviations:

Qac | Description
--- | ---
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3205 | The identifier '%1s' is not used and could be removed.

MSC14 | Recommendation | Do not introduce unnecessary platform dependencies | Compliant
MSC15 | Recommendation | Do not depend on undefined behavior | Compliant
MSC17 | Recommendation | Finish every set of statements associated with a case label with a break statement | Compliant
MSC20 | Recommendation | Do not use a switch statement to transfer control into a complex block | Compliant
MSC30 | Rule | Do not use the rand() function for generating pseudorandom numbers | Compliant
MSC32 | Rule | Properly seed pseudorandom number generators | Compliant
MSC33 | Rule | Do not pass invalid data to the asctime() function | Compliant
MSC37 | Rule | Ensure that control never reaches the end of a non-void function | Compliant
MSC38 | Rule | Do not treat a predefined identifier as an object if it might only be implemented as a macro | Compliant
MSC39 | Rule | Do not call va_arg() on a va_list that has an indeterminate value | Compliant
MSC40 | Rule | Do not violate constraints | Compliant
MSC41 | Rule | Never hard code sensitive information | Compliant
POS30 | Rule_Optional | Use the readlink() function properly | Compliant
POS33 | Rule_Optional | Do not use vfork() | Compliant
POS34 | Rule_Optional | Do not call putenv() with a pointer to an automatic variable as the argument | Compliant
POS35 | Rule_Optional | Avoid race conditions while checking for the existence of a symbolic link | Compliant
POS36 | Rule_Optional | Observe correct revocation order while relinquishing privileges | Compliant
POS37 | Rule_Optional | Ensure that privilege relinquishment is successful | Compliant
POS38 | Rule_Optional | Beware of race conditions when using fork and file descriptors | Compliant
POS39 | Rule_Optional | Use the correct byte ordering when transferring data between systems | Compliant
POS44 | Rule_Optional | Do not use signals to terminate threads | Compliant
POS47 | Rule_Optional | Do not use threads that can be canceled asynchronously | Compliant
POS48 | Rule_Optional | Do not unlock or destroy another POSIX thread's mutex | Compliant
POS49 | Rule_Optional | When data must be accessed by multiple threads, provide a mutex and guarantee no adjacent data is also accessed | Compliant
POS50 | Rule_Optional | Declare objects shared between POSIX threads with appropriate storage durations | Compliant
POS51 | Rule_Optional | Avoid deadlock with POSIX threads by locking in predefined order | Compliant
POS52 | Rule_Optional | Do not perform operations that can block while holding a POSIX lock | Compliant
POS53 | Rule_Optional | Do not use more than one mutex for concurrent waiting operations on a condition variable | Compliant
POS54 | Rule_Optional | Detect and handle POSIX library errors | Disapplied
PRE00 | Recommendation | Prefer inline or static functions to function-like macros | Disapplied
PRE01 | Recommendation | Use parentheses within macros around parameter names | Compliant
PRE02 | Recommendation | Macro replacement lists should be parenthesized | Compliant
PRE03 | Recommendation | Prefer typedefs to defines for encoding non-pointer types | Compliant
PRE04 | Recommendation | Do not reuse a standard header file name | Compliant
PRE05 | Recommendation | Understand macro replacement when concatenating tokens or performing stringification | Compliant
PRE06 | Recommendation | Enclose header files in an inclusion guard | Compliant
PRE07 | Recommendation | Avoid using repeated question marks | Compliant
PRE08 | Recommendation | Guarantee that header file names are unique | Disapplied
PRE09 | Recommendation | Do not replace secure functions with deprecated or obsolescent functions | Compliant

PRE10

Recommendation

Wrap multi-statement macros in a do-while loop

Compliant with deviations:

Qac | Description
--- | ---
qac-3412 | Macro defines an unrecognized code-fragment.

PRE11 | Recommendation | Do not conclude macro definitions with a semicolon | Disapplied
PRE12 | Recommendation | Do not define unsafe macros | Disapplied
PRE30 | Rule | Do not create a universal character name through concatenation | Compliant
PRE31 | Rule | Avoid side effects in arguments to unsafe macros | Compliant
PRE32 | Rule | Do not use preprocessor directives in invocations of function-like macros | Compliant
SIG00 | Recommendation | Mask signals handled by noninterruptible signal handlers | Compliant
SIG01 | Recommendation | Understand implementation-specific details regarding signal handler persistence | Compliant
SIG30 | Rule | Call only asynchronous-safe functions within signal handlers | Compliant
SIG31 | Rule | Do not access shared objects in signal handlers | Compliant
SIG34 | Rule | Do not call signal() from within interruptible signal handlers | Compliant
SIG35 | Rule | Do not return from a computational exception signal handler | Compliant
STR04 | Recommendation | Use plain char for characters in the basic character set | Compliant
STR05 | Recommendation | Use pointers to const when referring to string literals | Compliant
STR06 | Recommendation | Do not assume that strtok() leaves the parse string unchanged | Compliant
STR07 | Recommendation | Use the bounds-checking interfaces for string manipulation | Compliant
STR09 | Recommendation | Don't assume numeric values for expressions with type plain character | Compliant
STR10 | Recommendation | Do not concatenate different type of string literals | Compliant
STR11 | Recommendation | Do not specify the bound of a character array initialized with a string literal | Compliant
STR30 | Rule | Do not attempt to modify string literals | Compliant
STR31 | Rule | Guarantee that storage for strings has sufficient space for character data and the null terminator | Compliant
STR32 | Rule | Do not pass a non-null-terminated character sequence to a library function that expects a string | Compliant
STR34 | Rule | Cast characters to unsigned char before converting to larger integer sizes | Compliant
STR37 | Rule | Arguments to character-handling functions must be representable as an unsigned char | Compliant
STR38 | Rule | Do not confuse narrow and wide character strings and functions | Compliant

## Deviation Permits

This section targets to provide an overview of Deviation Permits.
All the rules corresponding to the deviation permits are disabled inside Helix QAC and will not cause any violation or deviation in the Deviation records section below.

Guideline | Category | Description | Ratio | Sub Rules | Characteristics | Reason
--- | --- | --- | --- | --- | --- | ---

DCL00

Recommendation

Const-qualify immutable objects

2/5

Qac | Description
--- | ---
qac-3204 | The variable '%s' is only set once and so it could be declared with the 'const' qualifier.
qac-3227 | The parameter '%s' is never modified and so it could be declared with the 'const' qualifier.

Other / AcceptedRecoBreach

DCL05

Recommendation

Use typedefs of non-pointer types only

1/1 (all)

Qac | Description
--- | ---
certccm-5004 | This typedef is applied to a pointer type.

Other / AcceptedRecoBreach

DCL06

Recommendation

Use meaningful symbolic constants to represent literal values

2/6

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

Other / AcceptedRecoBreach

DCL07

Recommendation

Include the appropriate type information in function declarators

1/6

Qac | Description
--- | ---
qac-3450 | Function '%s', with internal linkage, is being defined without a previous declaration.

Other / AcceptedRecoBreach

DCL19

Recommendation

Minimize the scope of variables and functions

3/6

Qac | Description
--- | ---
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
rcma-1505 | The function '%1s' is only referenced in the translation unit where it is defined.
rcma-1532 | The function '%1s' is only referenced in one translation unit - but not the one in which it is defined.

Maintainability / Modularity

RFAL Library contains functions which may be used by the user but are not called in the project used for checking compliance.

DCL23

Recommendation

Guarantee that mutually visible identifiers are unique

2/8

Qac | Description
--- | ---
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.

Maintainability / Analysability

Project is following C99 which defines 63 signficant characters.

DCL40

Rule

Do not create incompatible declarations of the same function or object

2/5

Qac | Description
--- | ---
qac-0776 | [L] External identifier matches other external identifier(s) (e.g. '%1s') in first 6 characters - program does not conform strictly to ISO:C90.
qac-0778 | [L] Identifier matches other identifier(s) (e.g. '%1s') in first 31 characters - program does not conform strictly to ISO:C90.

Maintainability / Analysability

Project is following C99 which defines 63 signficant characters.

ERR33

Rule

Detect and handle standard library errors

1/1 (all)

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

Maintainability / Analysability

Treating the return codes of functions in all places without exception handling would make the code hard to read and maintain. Error checking has been reduced to the places where needed.

EXP07

Recommendation

Do not diminish the benefits of constants by assuming their values in expressions

2/6

Qac | Description
--- | ---
qac-3120 | Hard-coded 'magic' integer constant, '%1s'.
qac-3132 | Hard coded 'magic' number, '%1s', used to define the size of an array.

Other / AcceptedRecoBreach

EXP11

Recommendation

Do not make assumptions regarding the layout of structures with bit-fields

1/2

Qac | Description
--- | ---
qac-0751 | Casting to char pointer type.

Other / AcceptedRecoBreach

0751-See EXP39

EXP12

Recommendation

Do not ignore values returned by functions

1/1 (all)

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

Maintainability / Analysability

See ERR33.

EXP15

Recommendation

Do not place a semicolon on the same line as an if, for, or while statement

1/1 (all)

Qac | Description
--- | ---
qac-3109 | Null statement follows other code on the same line.

Other / AcceptedRecoBreach

EXP39

Rule

Do not access a variable through a pointer of an incompatible type

1/3

Qac | Description
--- | ---
qac-0751 | Casting to char pointer type.

Other / NonMatch

EXP39 states "Modifying a variable through a pointer of an incompatible type (other than unsigned char)". Therefore 0751 is disabled.

EXP45

Rule

Do not perform assignments in selection statements

1/4

Qac | Description
--- | ---
qac-3416 | Logical operation performed on expression with persistent side effects.

Other / NonMatch

EXP45 is only targeting assignment inside expressions. 3416 is a considered an invalid mapping.

INT02

Recommendation

Understand integer conversion rules

7/119

Qac | Description
--- | ---
qac-1251 | Suffixed integer constant causes implicit conversion of other operand.
qac-1290 | An integer constant of 'essentially signed' type is being converted to unsigned type on assignment.
qac-2100 | Integral promotion : unsigned char promoted to signed int.
qac-2101 | Integral promotion : unsigned short promoted to signed int.
qac-2105 | Integral promotion : signed short promoted to signed int.
qac-2109 | Integral promotion : _Bool promoted to signed int.
qac-4471 | A non-constant expression of 'essentially unsigned' type (%1s) is being passed to a function parameter of wider unsigned type, '%2s'.

Other / AcceptedRecoBreach

Code complies to MISRA restrictions for types and casts (Dir-1.1, Rule-1.1 ,10.1-10.8, 11.1-8) with documented exceptions. No further restrictions employed.

INT13

Recommendation

Use bitwise operators only on unsigned operands

1/5

Qac | Description
--- | ---
qac-4544 | A non-negative constant expression of 'essentially signed' type (%1s) is being used as the right-hand operand of this shift operator (%2s).

Other / AcceptedRecoBreach

INT30

Rule

Ensure that unsigned integer operations do not wrap

2/8

Qac | Description
--- | ---
qac-3383 | Cannot identify wraparound guard for unsigned arithmetic expression.
qac-3384 | Cannot identify wraparound guard for dependent unsigned arithmetic expression.

Maintainability / Testability

No apparent nor definite wraparound happening, checks for wraparound are omitted.

INT36

Rule

Converting a pointer to integer or integer to pointer

1/9

Qac | Description
--- | ---
qac-0306 | [I] Cast between a pointer to object and an integral type.

Maintainability / Modifiability

Using STM32 HAL already creates many violations. Also needed to do pointer arithmetic, calculating offsets inside a buffer.

MSC01

Recommendation

Strive for logical completeness

1/3

Qac | Description
--- | ---
qac-2000 | No 'else' clause exists for this 'if' statement.

Other / AcceptedRecoBreach

MSC07

Recommendation

Detect and remove dead code

9/28

Qac | Description
--- | ---
qac-2881 | The code in this 'default' clause is unreachable.
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3205 | The identifier '%1s' is not used and could be removed.
qac-3210 | The global identifier '%1s' is declared here but is not used in this translation unit.
rcma-1503 | The function '%1s' is defined but is not used within this project.

Usability / User error protection

All the violations were checked and fixing the violation would deteriorate robustness: Removing checks which are unnecessary at the given position, removing trailing iterator increment, etc. Also suppressed for MISRA Rule-2.2

MSC13

Recommendation

Detect and remove unused values

6/14

Qac | Description
--- | ---
qac-2982 | This assignment is redundant. The value of this object is never used before being modified.
qac-2983 | This assignment is redundant. The value of this object is never subsequently used.
qac-2984 | This operation is redundant. The value of the result is always '%1s'.
qac-2985 | This operation is redundant. The value of the result is always that of the left-hand operand.
qac-2986 | This operation is redundant. The value of the result is always that of the right-hand operand.
qac-3205 | The identifier '%1s' is not used and could be removed.

Usability / User error protection

All the violations were checked and fixing the violation would deteriorate robustness: Removing checks which are unnecessary at the given position, removing trailing iterator increment, etc. Also suppressed for MISRA Rule-2.2

POS54

Rule_Optional

Detect and handle POSIX library errors

1/1 (all)

Qac | Description
--- | ---
qac-3200 | '%s' returns a value which is not being used.

Maintainability / Analysability

Only memcpy, memmove and memset are used which don't return errors. The more general 3200(already suppressed as part of ERR33) would only report other violations.

PRE00

Recommendation

Prefer inline or static functions to function-like macros

1/1 (all)

Qac | Description
--- | ---
qac-3453 | A function could probably be used instead of this function-like macro.

Performance / Resource utilization

Suppressed due to code optimization and efficiency. Compare MISRA Dir-4.9.

PRE08

Recommendation

Guarantee that header file names are unique

1/1 (all)

Qac | Description
--- | ---
certccm-5002 | The header '%s' file name shadows a previously included header.

Other / AcceptedRecoBreach

PRE10

Recommendation

Wrap multi-statement macros in a do-while loop

1/2

Qac | Description
--- | ---
qac-3412 | Macro defines an unrecognized code-fragment.

Other / AcceptedRecoBreach

PRE11

Recommendation

Do not conclude macro definitions with a semicolon

1/1 (all)

Qac | Description
--- | ---
qac-3412 | Macro defines an unrecognized code-fragment.

Other / AcceptedRecoBreach

PRE12

Recommendation

Do not define unsafe macros

1/1 (all)

Qac | Description
--- | ---
qac-3456 | Parameter '%1s' will be evaluated more than once when this macro is used.

Other / AcceptedRecoBreach

## Deviation Records

This section targets to provide an overview of Deviation Records.

### 1. Suppressions by File

#### File: rfal/include/rfal_utils.h

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

147

1

certccm-5003 | The obsolete function '%s' will be used as a result of this macro expansion

CERT C 9 - string.h from Cosmic only provides functions with low qualified parameters

#### File: rfal/source/rfal_iso15693_2.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

524

1

qac-2911 | Definite: Wraparound in unsigned arithmetic operation.

CERT INT30 - Intentional underflow, part of the coding

#### File: rfal/source/rfal_isoDep.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

1027

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

796

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2731

1

qac-0310 | Casting to different object pointer type.

MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication

2794

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2279-2280

1

qac-0310 | Casting to different object pointer type.

MISRA 11.3 - Intentional safe cast to avoiding buffer duplication

1360

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

#### File: rfal/source/rfal_nfc.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

1924

1

qac-0310 | Casting to different object pointer type.

MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication

205

1

qac-2880 | This code is unreachable.

MISRA 2.1 - Unreachable code due to configuration option being set/unset

2149

1

qac-0310 | Casting to different object pointer type.

MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication

#### File: rfal/source/rfal_nfcDep.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

1681

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2689

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

1609

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2630

1

qac-0310 | Casting to different object pointer type.

MISRA 11.3 - Intentional safe cast to avoiding large buffer duplication

#### File: rfal/source/rfal_nfca.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

739

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

314

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

#### File: rfal/source/rfal_t4t.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

136

1

qac-2880 | This code is unreachable.

MISRA 2.1 - Unreachable code due to configuration option being set/unset

127

1

qac-2880 | This code is unreachable.

MISRA 2.1 - Unreachable code due to configuration option being set/unset

#### File: rfal/source/st25r3916/rfal_analogConfigTbl.h

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

404-406

1

qac-3674 | Array size defined implicitly by the number of initializers.

CERT ARR02 - Flexible array will be used with sizeof, on adding elements error-prone manual update of size would be required

#### File: rfal/source/st25r3916/rfal_dpoTbl.h

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

53-55

1

qac-3674 | Array size defined implicitly by the number of initializers.

CERT ARR02 - Flexible array will be used with sizeof, on adding elements error-prone manual update of size would be required

#### File: rfal/source/st25r3916/rfal_rfst25r3916.c

Lines | Count | Suppressed Qacs | Comment
--- | --- | --- | ---

2059

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

3637

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2028

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2402

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2043

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2477

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2131

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2672

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2183

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2261

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

2565

1

qac-2003 | The preceding 'switch' clause is not empty and does not end with a 'jump' statement. Execution will fall through.

MISRA 16.3 - Intentional fall through

1055

1

qac-2880 | This code is unreachable.

MISRA 2.1 - Inconsistently marked as unreachable code

### 2. Suppressions by Group

File | Recommendation | Rule | Total
--- | --- | --- | ---
rfal/source/st25r3916/rfal_rfst25r3916.c | 12 | 0 | 12
rfal/source/st25r3916/rfal_dpoTbl.h | 1 | 0 | 1
rfal/source/rfal_t4t.c | 2 | 0 | 2
rfal/source/st25r3916/rfal_analogConfigTbl.h | 1 | 0 | 1
rfal/source/rfal_nfcDep.c | 4 | 1 | 5
rfal/source/rfal_nfca.c | 2 | 0 | 2
rfal/source/rfal_isoDep.c | 6 | 2 | 8
rfal/source/rfal_iso15693_2.c | 1 | 1 | 2
rfal/source/rfal_nfc.c | 3 | 2 | 5
rfal/include/rfal_utils.h | 1 | 0 | 1
Total | 33 | 6 | 39

Note: Qac messages can be mapped by more than one rule or group. In such case it will be counted several times.

### 3. Redundant Suppressions

#### o Duplicated Suppressions

There are no duplicated suppressions.

#### o Unused Suppressions

#### File: common/firmware/STM/utils/Inc/utils.h

Line | Unused Qacs | Comment
--- | --- | ---

79

qac-0431 | [C] Function argument points to a more heavily qualified type.

MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters

81

qac-0431 | [C] Function argument points to a more heavily qualified type.

MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters

#### File: rfal/include/rfal_utils.h

Line | Unused Qacs | Comment
--- | --- | ---

148

qac-0431 | [C] Function argument points to a more heavily qualified type.

MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters

150

qac-0431 | [C] Function argument points to a more heavily qualified type.

MISRA 1.1 - string.h from Cosmic only provides functions with low qualified parameters

#### File: rfal/source/rfal_isoDep.c

Line | Unused Qacs | Comment
--- | --- | ---

2564

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created

2557

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and above clamping of maxTxBR guarantee no invalid enum values to be created

2185

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalIsoDepFSxI is guaranteed whithin 4bit range

2653

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created

2640

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and range of loop variable guarantee no invalid enum values to be created

416

qac-0750 | A union type specifier has been defined.

MISRA 19.2 - Members of the union will not be used concurrently, only one frame at a time

1400

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and above masks guarantee no invalid enum values to be created

#### File: rfal/source/rfal_nfc.c

Line | Unused Qacs | Comment
--- | --- | ---

77

qac-0750 | A union type specifier has been defined.

MISRA 19.2 - Members of the union will not be used concurrently, only one interface at a time

219

qac-2880 | This code is unreachable.

MISRA 2.1 - Unreachable code due to configuration option being set/unset

#### File: rfal/source/rfal_nfcDep.c

Line | Unused Qacs | Comment
--- | --- | ---

1930

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of enum rfalBitRate and definition of rfalNfcDepBRS2DSI guarantee no invalid enum values to be created

#### File: rfal/source/rfal_nfca.c

Line | Unused Qacs | Comment
--- | --- | ---

746

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Guaranteed that no invalid enum values are created: see guard_eq_RFAL_NFCA_T2T, ....

#### File: rfal/source/rfal_nfcb.c

Line | Unused Qacs | Comment
--- | --- | ---

545

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Layout of rfalNfcbSlots and the limited loop guarantee that no invalid enum values are created.

#### File: rfal/source/st25r3916/rfal_analogConfigTbl.h

Line | Unused Qacs | Comment
--- | --- | ---

717

qac-3406 | Object/function '%s', with external linkage, has been defined in a header file.

MISRA 8.9 - Externally generated table included by the library

405

MISRA 8.9 - Externally generated table included by the library

716

qac-3674 | Array size defined implicitly by the number of initializers.

CERT ARR02 - Flexible array will be used with sizeof, on adding elements error-prone manual update of size would be required

405

qac-3406 | Object/function '%s', with external linkage, has been defined in a header file.

MISRA 8.6 - Externally generated table included by the library

717

MISRA 8.6 - Externally generated table included by the library

#### File: rfal/source/st25r3916/rfal_dpoTbl.h

Line | Unused Qacs | Comment
--- | --- | ---

65

qac-3674 | Array size defined implicitly by the number of initializers.

CERT ARR02 - Flexible array will be used with sizeof, on adding elements error-prone manual update of size would be required

66

MISRA 8.9 - Externally generated table included by the library

66

qac-3406 | Object/function '%s', with external linkage, has been defined in a header file.

MISRA 8.6 - Externally generated table included by the library

54

MISRA 8.9 - Externally generated table included by the library

54

qac-3406 | Object/function '%s', with external linkage, has been defined in a header file.

MISRA 8.6 - Externally generated table included by the library

#### File: rfal/source/st25r3916/rfal_rfst25r3916.c

Line | Unused Qacs | Comment
--- | --- | ---

3657

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Guaranteed that no invalid enum values may be created. See also equalityGuard_RFAL_BR_106 ff.

3387

qac-0759 | An object of union type has been defined.

MISRA 19.2 - Allocating Union where members are of the same type, just different names. Thus no problem can occur.

280

qac-0750 | A union type specifier has been defined.

MISRA 19.2 - Both members are of the same type, just different names. Thus no problem can occur.

1639

5209 | No description

MISRA 4.9 - External function (sqrt()) requires double

3890

qac-4342 | An expression of 'essentially unsigned' type (%1s) is being cast to enum type '%2s'.

MISRA 10.5 - Guaranteed that no invalid enum values may be created. See also equalityGuard_RFAL_BR_106 ff.

### 4. Continuous Suppressions by File

There are no continuous suppressions by file.

### 5. File Status

Active Diagnostics refers to diagnostics that are not suppressed (note: no suppressed diagnostics have been taken into account for the calculation of information in this document).

Files | Active Diagnostics | Violated Rules | Violation Count | Compliance Index
--- | --- | --- | --- | ---
rfal/include/rfal_analogConfig.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_cd.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_chip.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_dpo.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_isoDep.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfc.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfcDep.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfca.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfcb.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfcf.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_nfcv.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_rf.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_st25tb.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_st25xv.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_t1t.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_t2t.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_t4t.h | 0 | 0 | 0 | 100.00
rfal/include/rfal_utils.h | 0 | 0 | 0 | 100.00
rfal/source/rfal_analogConfig.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_cd.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_cdHb.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_crc.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_crc.h | 0 | 0 | 0 | 100.00
rfal/source/rfal_dpo.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_iso15693_2.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_iso15693_2.h | 0 | 0 | 0 | 100.00
rfal/source/rfal_isoDep.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfc.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfcDep.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfca.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfcb.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfcf.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_nfcv.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_st25tb.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_st25xv.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_t1t.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_t2t.c | 0 | 0 | 0 | 100.00
rfal/source/rfal_t4t.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/rfal_analogConfigTbl.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/rfal_dpoTbl.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/rfal_features.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/rfal_rfst25r3916.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_aat.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_aat.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_com.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_com.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_irq.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_irq.h | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_led.c | 0 | 0 | 0 | 100.00
rfal/source/st25r3916/st25r3916_led.h | 0 | 0 | 0 | 100.00
Total | 0 | 0 | 0 | 100.00

Nota: Calculation of Compliance Index
The Compliance Index is the percentage of groups which have no messages in them.
For each file it is calculated as follows:
( Ntotal - Nerror ) / Ntotal x 100
Ntotal is the total number of enforced rules (i.e. the number of rules that have at least one message mapped to it directly).
Nerror is the number of rules for which messages appear in that file.
The File Compliance Index is the mean of all the individual file compliances.