此版本包括以下增强功能:
发布日期:2022 年 11 月 28 日
增强 Automotive Compliance Pack
扩展 Automotive Pack 以帮助您遵循汽车标准。
- MISRA C 2012 测试配置现已根据 MISRA C 2012 Amendment 3 中新增规则和更新规则进行扩展。
- 添加了新的 MISRA C++ 202X 测试配置。此预览配置涵盖了“Public Review Draft of MISRA C++ 202X”文档中一些精选的准则。
- 有关新增规则和更新规则的列表,请参阅新增规则和更新规则。
增强 Security Compliance Pack
Security Pack 已扩展新的 2022 CWE Top 25 和 2022 CWE Top 25 + on the Cusp 测试配置,帮助您遵循安全标准。
增强静态分析
- 已扩展基于正则表达式的行抑制,允许指定规则标识符。详细信息请参阅基于正则表达式模式定义行抑制。
- 包含对 Modern C/C++ C11 _Generic 和 if constexpr 的增强支持,提高静态分析准确性。
增强单元测试
- 增加对 C++ 模板打桩的支持。有关支持的编译器和限制等详细信息,请参阅为 C++ 模板使用桩函数。
- 优化 C++ 模板的代码覆盖率分析。
编译器支持
现已支持以下编译器:
编译器名称 | 编译器标识符 |
---|---|
GHS Compiler for PPC 2019.1 | ghsppc_2019_1 |
GHS Compiler for PPC 2020.1 | ghsppc_2020_1 |
GNU GCC 8.x for aarch64/ARM64 | gcc_8-aarch64 |
GNU GCC 10.x for aarch64/ARM64 | gcc_10-aarch64 |
GNU GCC 11.x for aarch64/ARM64 | gcc_11-aarch64 |
新增和更新的代码分析规则
添加新的代码分析规则,增加合规标准的覆盖率。有关新增规则和更新规则的列表,请参阅新增规则和更新规则。
新增的测试配置
添加了以下测试配置:
- MISRA C++ 202X
- CWE Top 25 2022
- CWE Top 25 + on the Cusp 2022
以下测试配置已根据新规则进行了更新:
- AUTOSAR C++14 Coding Guidelines
- Flow Analysis Aggressive
- Flow Analysis Fast
- Flow Analysis Standard
- MISRA C 2004
- MISRA C 2012
- MISRA C++ 2008
- Recommended Rules for FDA (C++)
- SEI CERT C Guidelines
- SEI CERT C Rules
- SEI CERT C++ Rules
其他更新
- 更新了 GitHub CI/CD 集成,支持静态分析结果的基准化。请参阅文档:https://github.com/parasoft/run-cpptest-action/blob/master/README.md。
- 更新了 GitLab CI/CD 集成,支持静态分析结果的基准化。请参阅文档:https://gitlab.com/parasoft/cpptest-gitlab/-/blob/master/README.md。
- 现已支持在基于 IDE 和 CLI 的工作流中使用 OKTA 进行 OIDC 身份验证。请参阅在 GUI 中配置 OpenID Connect 和在命令行中配置 OpenID Connect。
- 对流分析引擎的总体优化会使流分析规则报告的违规与之前的版本相比存在一些差异。
- TFS SDK 库现已不再作为 Parasoft 的一部分提供。如果希望在您的机器上使用 TFS 支持,您需要向供应商获取 TFS SDK。
弃用的功能
现已弃用以下团队服务器功能并将在 2023 年删除:
- 在团队服务器上存储测试配置、规则和规则映射
- 在 IDE 的图形编辑器中编辑团队服务器测试配置
- 全局目标管理
- 在团队服务器上重新分配作者
解决的 Bug 和 FR
Bug/FR ID | 说明 |
---|---|
CPP-36168 | [coverage] 未报告通过模板类内部的友元声明定义的模板函数的代码覆盖率 |
CPP-42657 | [static] 优化 AUTOSAR A6-5-3 的映射 |
CPP-46218 | [ide] 在 IDE 中导入/导出首选项时应包含配置>自定义编译器 |
CPP-47394 | [engine][edg] 解析错误:错误:“constexpr”在此处无效 (clang_8_0) |
CPP-48228 | [unit] 支持 C++ 模板打桩 |
CPP-50150 | [static] 优化 AUTOSAR A12-1-2 的映射 |
CPP-50151 | [static] 优化 AUTOSAR A12-1-3| 的映射 |
CPP-50152 | [ide] 在 IDE 中导入/导出首选项时应包含配置>自定义编译器 |
CPP-50172 | [static] 应优化 CERT_C-MSC33 的映射 |
CPP-50282 | [static] 更新 CERT CON35-C 映射:我们应该使用 BD-TRS-ORDER 替代 BD-TRS-DLOCK。 |
CPP-50402 | [static] 应优化 CERT_C-EXP37 的映射 |
CPP-50406 | [static] 优化 AUTOSAR A5-2-6 的映射 |
CPP-50421 | [vscode] 在问题视图中(并/或通过弹出消息)报告 Parasoft 设置问题 |
CPP-50439 | [compiler] 支持 PPC 2019.1 的 GHS Compiler |
CPP-50440 | [compiler] 支持 PPC 2020.1 的 GHS Compiler |
CPP-50447 | [engine][edg] cpptestcc 错误:'{' token 前面应该有 ')' |
CPP-50560 | [static] MISRA2004-15_1 (MISRAC2012-RULE_16_1-b) 在 '{' 有条件地使用于 switch 语句中时误报 |
CPP-50583 | [coverage] 为非模板函数内部定义的通用 lambda 添加代码覆盖率 |
CPP-50628 | [static] 仅针对特定规则启用基于 regex 模式的抑制 |
CPP-50664 | [os] C/C++test Standard 的 Linux ARM64 (aarch64) 原生支持 |
CPP-50670 | [complier] 支持 ARM64 的 GNU GCC 8(扩展、完整版、linux) |
CPP-50688 | [engine][edg] 模板别名搜索时解析器崩溃 |
CPP-51171 | [engine] ' #pragma MUST_ITERATE(...)' 必须直接在 for/while/do-while 前面重构 |
CPP-51172 | [engine][edg] 不同的过载/SFINE 解析导致断言失败 |
CPP-51174 | [engine][edg] 函数签名中 decltype 与模板结合的问题 |
CPP-51177 | [ide] 在 C/C++test Pro VS 中查找 IAppFile 性能低 |
CPP-51178 | [engine][edg] 在解析过程中,'type_traits' 中的类型被简化为 'integral_type<true/false>' |
CPP-51280 | [static] TEMPL-12:运行规则时发生 python 错误 |
CPP-51282 | [unit] 无法为带有'void(*fptr)(int&)' 类型参数的函数生成测试用例 |
CPP-51283 | [compiler] IAR:添加响应文件支持 |
CPP-51284 | [compiler] ccac:扩展内建函数列表 |
CPP-51296 | [engine] 程序接收信号 11 |
CPP-51299 | [engine] 使用语法 "operator*<>" 时,MISRA 2012 规则中出现段错误 |
CPP-51300 | [static] MISRA2004-16_10 (AUTOSAR-M0_3_2-a) 针对 case 标签中使用的运算符误报 |
CPP-51302 | [complier] tiarm_20_2:扩展支持的内建/内置函数列表 |
CPP-51306 | [engine] 无原型: @6cf99e80 0 template 'operator()' 'operator()'. |
CPP-51353 | [static] MISRA C 2004 14.3:简化规则,更符合 MISRA 规范 |
CPP-51358 | [coverage] const 值变量的覆盖率插桩不正确 |
CPP-51371 | [engine][edg] cpptestcc:错误:未声明 g_SceneInterfacestd |
CPP-51372 | [engine] 插桩变量未声明为 constexpr(错误:调用非‘constexpr’函数) |
CPP-51443 | [static] CODSTA-222 (AUTOSAR-M5_0_6-a) 在模板函数返回枚举常量时误报 |
CPP-51448 | [static] OOP-36 (MISRA2008-9_3_2_b) 在从成员函数返回成员数组元素的地址时未报告违规 |
CPP-51451 | [static] 改进 AUTOSAR-A12-0-1 的映射 |
CPP-51487 | [build] 并不总是能成功从 *.vcxproj 读取项目名称 |
CPP-51510 | [static] CODSTA-CPP-78 (AUTOSAR-M9_3_3-a) 在成员函数中使用捕获 'this' 的 lambda 时误报 |
CPP-51521 | [static] TEMPL-12:IndexError:列表索引超出范围 |
CPP-51536 | [static] MISRA2004-8_7 (AUTOSAR-M3_4_1-b) 在 constexpr 变量用作模板参数时误报 |
CPP-51543 | [engine][edg] 静态分析崩溃,信号 11 |
CPP-51544 | [static] CERT_C-DCL06-a (CODSTA-29) 与文档不一致 |
CPP-51547 | [static] OPT-01 (AUTOSAR-M3_4_1-a) 在 for-range 中声明的变量被 lambda 捕获时误报 |
CPP-51583 | [static] AUTOSAR-A0_1_4-a - 误报 |
CPP-51587 | [complier] iccarm:错误:命令行选项 "--import_cmse_lib_out" 的参数为 "--semihosting |
CPP-51593 | [static] MISRA2004-7_1_a (AUTOSAR-M2_13_2-a) 针对原始字符串中的八进制常量误报 |
CPP-51619 | [static] CODSTA-CPP-93、CODSTA-CPP-94 和 PORT-31 消耗大量内存 |
CPP-51651 | [docs] 描述有关在文件路径末尾使用反斜杠的 IAR 特定限制 |
CPP-51655 | [static] MISRA2012-RULE-20_9_b - 分析时出现 phyton 错误 |
CPP-51673 | [static] MISRA2004-9_2_b (MISRAC2012-RULE_9_3-a) 在数组初始化器中使用枚举常量不报告违规 |
CPP-51685 | [compiler] iccarm:优化 -fpu 选项处理 |
CPP-51686 | [static] CODSTA-CPP-88 (MISRA2008-2_10_6_d) 针对不同作用域类型的 typedefs 误报 |
CPP-51780 | [engine] 打桩导致 "error: no matching function for call to 'add_package_op_ext'" |
CPP-51828 | [engine] 模板函数中对 UDL 使用的重构不正确 |
CPP-51839 | [engine] 插桩编译错误:‘}’ token 前面应该有 primary-expression |
CPP-51847 | [build] 优化 compile_commands.json 解析器以支持 "arguments[]" |
FA-6300 | FA 结果不正确,因为模拟没有考虑 volatile 变量的值可能会在后台发生变化。 |
FA-7817 | BD-PB-CC (MISRAC2012-RULE_14_3-ac) - 针对第一个 while 循环误报,并且无法正确处理联合体 |
FA-7970 | BD-PB-CC (MISRA2012-RULE-14_3_zc) 针对 volatile 结构报告违规 |
FA-8392 | BD-API-STRSIZE 由于“在安全使用零终止字符串对象时报告违规信息”参数在某些情况下不能生效而误报。 |
FA-8563 | BD-API-STRSIZE 针对条件运算符误报 |
FA-8983 | 流分析不考虑静态成员字段的初始化 |
FA-9035 | 尽管有溢出对策,仍检测到 BD-PB-OVERFWR |
FA-9040 | BD-PB-OVERFNZT 误报 |
FA-9150 | 条件包含数组元素访问的循环模拟不正确 |
新增规则
规则 ID | 标题 |
---|---|
AUTOSAR-M17_0_5-b | 不应使用标准头文件 <setjmp.h> 或 <csetjmp> |
AUTOSAR-M18_0_4-b | 不应使用 <time.h> 库中的时间处理函数和宏 |
AUTOSAR-M18_0_4-c | 不应使用 <time.h> 库中定义的类型 |
BD-API-REALLOC | 不要将 0 值作为 size 参数传递给 realloc 函数 |
BD-PB-NANINF | 不要使用可能导致 NaN 和无穷大值的浮点表达式 |
BD-PB-UNGETC | 不要对文件位置指示器为零的流使用 ungetc 函数 |
CODSTA-02_b | union 成员不应被声明为位域 |
CODSTA-108_c | 在 <tgmath.h> 中声明的任何通用类型宏的所有参数都应具有适当的基本类型 |
CODSTA-108_d | 在 <tgmath.h> 中声明的任何多参数通用类型宏应具有相同的标准类型 |
CODSTA-109_b | 不应使用标准头文件 <fenv.h> |
CODSTA-136_c | 不应使用标准头文件 <stdarg.h> 或 <cstdarg> |
CODSTA-18_b | 除了在类函数宏中,否则不应使用 'Do' 语句 |
CODSTA-209_b | 不要使用宏 ATOMIC_VAR_INIT |
CODSTA-225 | 浮点数表达式不应显式(语法上)进行等于(==)或不等于(!=)的测试 |
CODSTA-MC-01 | 'alignof' 运算符不应与数组类型一起使用作为其操作数 |
CODSTA-MC-02 | 对象的声明最多应包含一个显式对齐说明符 |
CODSTA-MC-03 | 不应在对象声明中使用零对齐说明符 |
CODSTA-MC-04 | 具有内部链接的对象的所有声明中的显式对齐说明符应相同 |
CODSTA-MC-05 | 每个泛型选择都应包含一个默认关联 |
CODSTA-MC-06 | 默认关联应放在关联列表中的第一个或最后一个 |
CODSTA-MC-07 | 泛型选择应指示至少一个非默认关联 |
CODSTA-MC-08 | 泛型选择只能从宏展开 |
CODSTA-MC-09 | 泛型关联应列出适当的类型 |
CODSTA-MC-10 | 宏定义中使用的泛型选择应在控制表达式中具有宏参数 |
CODSTA-MC-11 | 泛型选择不应依赖于隐式指针类型转换 |
CODSTA-MC-12 | 泛型选择的控制表达式应具有与其标准类型匹配的基本类型 |
CODSTA-MC-13 | 非从宏展开的泛型选择不应在控制表达式中包含潜在的副作用 |
CODSTA-MC-14 | 在泛型选择中,枚举类型不应与整数类型混用 |
CODSTA-MC-15 | 由宏展开的泛型选择只能计算一次其参数 |
CODSTA-MCPP-56 | 如果一个类通过 '=default'、'=delete' 或用户提供的声明声明了一个复制或移动操作或析构函数,那么这五个特殊成员函数中的所有其他函数也都应被声明 |
CWE-312-a | 避免将敏感数据传递给写日志文件的函数 |
CWE-401-a | 确保资源已释放 |
CWE-427-a | 小心确保 LoadLibrary() 加载正确的库 |
CWE-59-a | 在检查符号链接是否存在时避免竞争条件 |
CWE-668-a | 防止文件名注入 |
CWE-77-a | 防止命令注入 |
CWE-843-a | 不应在指向对象类型的指针和指向对象类型的其他指针之间执行强制转换 |
GLOBAL-ALIGNDECL | 如对象具有外部链接,在其所有声明中的显式对齐说明符都应相同 |
INIT-17_b | 用户定义的构造函数如果在所有构造函数中用相同的常量值初始化数据成员,应该使用 NSDMI 进行初始化 |
INIT-18 | 在同一类型中,不能同时使用 NSDMI 和构造函数中的非静态成员初始化器 |
MISRA2004-20_12_b | 不应使用 <time.h> 库中的时间处理函数和宏 |
MISRA2004-20_12_c | 不应使用 <time.h> 库中定义的类型 |
MISRA2008-18_0_4_b | 不应使用库 <ctime> 中的时间处理函数和宏 |
MISRA2008-18_0_4_c | 不应使用库 <ctime> 中定义的类型 |
MISRA2012-DIR-4_15 | 不要使用可能导致 NaN 和无穷大值的浮点表达式 |
MISRA2012-RULE-10_1_h | 浮点数表达式不应显式(语法上)进行等于(==)或不等于(!=)的测试 |
MISRA2012-RULE-17_10 | 用 _Noreturn 函数说明符声明的函数应具有 void 返回类型 |
MISRA2012-RULE-17_11 | 从不返回的函数应该用 _Noreturn 函数说明符来声明 |
MISRA2012-RULE-17_12 | 函数标识符只能与前面的 &, 或者与带括号的参数列表一起使用 |
MISRA2012-RULE-17_13 | 函数类型不应该被类型限定 |
MISRA2012-RULE-17_1_c | 不应使用标准头文件 <stdarg.h> |
MISRA2012-RULE-17_9 | 用 _Noreturn 函数说明符声明的函数不应返回给它的调用者 |
MISRA2012-RULE-18_9 | 一个对象不得在其生命周期之外使用 |
MISRA2012-RULE-1_5 | 在有内部联系的对象和函数的定义和声明中,应使用静态存储类指定器 |
MISRA2012-RULE-1_5_b | 存储类型修改器应与类型相关,而不是与变量或函数相关 |
MISRA2012-RULE-1_5_c | 函数类型应采用原型形式 |
MISRA2012-RULE-1_5_d | 不要使用宏 ATOMIC_VAR_INIT |
MISRA2012-RULE-1_5_e | 不要在 #undef 指令中使用 'bool'、'false' 或 'true' 标识符 |
MISRA2012-RULE-1_5_f | 不要在文件位置指示器为 0 的流上使用 ungetc 函数 |
MISRA2012-RULE-1_5_g | 不要将 0 值作为 size 参数传递给 realloc 函数 |
MISRA2012-RULE-21_10_b | 不应使用库 <time.h> 的时间处理函数和宏 |
MISRA2012-RULE-21_10_c | 不应使用 <time.h> 库中定义的类型 |
MISRA2012-RULE-21_12_b | 不应使用标准头文件 <fenv.h> |
MISRA2012-RULE-21_22 | 在 <tgmath.h> 中声明的任何通用类型宏的所有参数都应具有适当的基本类型 |
MISRA2012-RULE-21_23 | 在 <tgmath.h> 中声明的任何多参数通用类型宏应具有相同的标准类型 |
MISRA2012-RULE-21_24 | 不应使用 <stdlib.h> 的随机数生成函数 |
MISRA2012-RULE-23_1 | 泛型选择只能从宏展开 |
MISRA2012-RULE-23_1_b | 宏定义中使用的泛型选择应在控制表达式中具有宏参数 |
MISRA2012-RULE-23_2 | 非从宏展开的泛型选择不应在控制表达式中包含潜在的副作用 |
MISRA2012-RULE-23_3 | 泛型选择应该至少包含一个非默认的关联 |
MISRA2012-RULE-23_4 | 泛型关联应列出适当的类型 |
MISRA2012-RULE-23_5 | 泛型选择不应依赖于隐式指针类型转换 |
MISRA2012-RULE-23_6 | 泛型选择的控制表达式应具有与其标准类型匹配的基本类型 |
MISRA2012-RULE-23_6_b | 在泛型选择中,枚举类型不应与整数类型混用 |
MISRA2012-RULE-23_7 | 从宏中展开的泛型选择应该只评估一次它的参数 |
MISRA2012-RULE-23_8 | 默认关联应作为泛型选择的第一个或最后一个关联出现 |
MISRA2012-RULE-6_3 | 一个位域不应被声明为一个 union 的成员 |
MISRA2012-RULE-7_5 | 整数常数宏的参数应具有适当的形式 |
MISRA2012-RULE-8_15 | 具有外部链接和显式对齐规范的对象的所有声明应指定相同的对齐方式 |
MISRA2012-RULE-8_15_b | 具有内部链接和显式对齐规范的对象的所有声明应指定相同的对齐方式 |
MISRA2012-RULE-8_16 | 零的对齐规范不应出现在对象声明中 |
MISRA2012-RULE-8_17 | 在一个对象的声明中,最多只能出现一个明确的对齐说明符 |
MISRAC2012-DIR_4_15-a | 不要使用可能导致 NaN 和无穷大值的浮点表达式 |
MISRAC2012-RULE_10_1-h | 浮点数表达式不应显式(语法上)进行等于(==)或不等于(!=)的测试 |
MISRAC2012-RULE_17_1-c | 不应使用标准头文件 <stdarg.h> 或 <cstdarg> |
MISRAC2012-RULE_17_10-a | 声明为 'noreturn' 的函数应该具有 'void' 返回类型 |
MISRAC2012-RULE_17_11-a | 用指定不返回的属性声明不返回的函数 |
MISRAC2012-RULE_17_12-a | 函数标识符只能与前面的 '&' 一起使用,或者与括号中的参数列表一起使用,参数列表可以是空的 |
MISRAC2012-RULE_17_13-a | 函数类型的规范中不要包含任何类型限定符 |
MISRAC2012-RULE_17_9-a | 不要从不应该返回值的函数中返回 |
MISRAC2012-RULE_18_9-a | 不要修改具有临时生命周期的对象 |
MISRAC2012-RULE_1_5-a | 在有内部联系的对象和函数的定义和声明中,应使用静态存储类指定器 |
MISRAC2012-RULE_1_5-b | 存储类型修改器应与类型相关,而不是与变量或函数相关 |
MISRAC2012-RULE_1_5-c | 函数类型应采用原型形式 |
MISRAC2012-RULE_1_5-d | 不要使用宏 ATOMIC_VAR_INIT |
MISRAC2012-RULE_1_5-e | 不要在 #undef 指令中使用'bool'、'false' 或 'true' 标识符 |
MISRAC2012-RULE_1_5-f | 不要对文件位置指示器为零的流使用 ungetc 函数 |
MISRAC2012-RULE_1_5-g | 不要将 0 值作为 size 参数传递给 realloc 函数 |
MISRAC2012-RULE_21_10-b | 不应使用 <time.h> 库中的时间处理函数和宏 |
MISRAC2012-RULE_21_10-c | 不应使用 <time.h> 库中定义的类型 |
MISRAC2012-RULE_21_12-b | 不应使用标准头文件 <fenv.h> |
MISRAC2012-RULE_21_22-a | 在 <tgmath.h> 中声明的任何通用类型宏的所有参数都应具有适当的基本类型 |
MISRAC2012-RULE_21_23-a | 在 <tgmath.h> 中声明的任何多参数通用类型宏应具有相同的标准类型 |
MISRAC2012-RULE_21_24-a | 不应使用随机数生成器函数 'rand()' 和 'srand()' |
MISRAC2012-RULE_23_1-a | 泛型选择只能从宏展开 |
MISRAC2012-RULE_23_1-b | 宏定义中使用的泛型选择应在控制表达式中具有宏参数 |
MISRAC2012-RULE_23_2-a | 非从宏展开的泛型选择不应在控制表达式中包含潜在的副作用 |
MISRAC2012-RULE_23_3-a | 泛型选择应指示至少一个非默认关联 |
MISRAC2012-RULE_23_4-a | 泛型关联应列出适当的类型 |
MISRAC2012-RULE_23_5-a | 泛型选择不应依赖于隐式指针类型转换 |
MISRAC2012-RULE_23_6-a | 泛型选择的控制表达式应具有与其标准类型匹配的基本类型 |
MISRAC2012-RULE_23_6-b | 在泛型选择中,枚举类型不应与整数类型混用 |
MISRAC2012-RULE_23_7-a | 由宏展开的泛型选择只能计算一次其参数 |
MISRAC2012-RULE_23_8-a | 默认关联应放在关联列表中的第一个或最后一个 |
MISRAC2012-RULE_6_3-a | union 成员不应被声明为位域 |
MISRAC2012-RULE_7_5-a | 整数常量宏的参数应为具有适当值的十进制,八进制或十六进制常量 |
MISRAC2012-RULE_8_15-a | 如对象具有外部链接,在其所有声明中的显式对齐说明符都应相同 |
MISRAC2012-RULE_8_15-b | 具有内部链接的对象的所有声明中的显式对齐说明符应相同 |
MISRAC2012-RULE_8_16-a | 不应在对象声明中使用零对齐说明符 |
MISRAC2012-RULE_8_17-a | 对象的声明最多应包含一个显式对齐说明符 |
MISRACPP202X-0023-a | 不得使用三联符 |
MISRACPP202X-0025-a | 不得在 C 语言风格的注释中使用 /* 字符序列 |
MISRACPP202X-0035-a | 不得使用八进制字面量(除了零) |
MISRACPP202X-0036-a | 'U' 后缀应用于所有无符号类型的常量 |
MISRACPP202X-0039-a | 文件中的 #include 语句前面只能有其他预处理器指令或注释 |
MISRACPP202X-0042-a | 比起类函数宏,应优先使用函数 |
MISRACPP202X-0043-a | 传递给类函数宏的实参不得包括看起来像预处理指令的符号 |
MISRACPP202X-0045-a | 不要使用在编译单元中未定义的预编译器指令 #if 和 #elif 宏 |
MISRACPP202X-0046-a | 预处理指令应在语法上有意义,即使被预处理程序排除的情况下也是如此 |
MISRACPP202X-0049-a | 带有外部链接的数组,其大小应该显式地声明或者在初始化时隐性地定义 |
MISRACPP202X-0064-a | 首选 'nullptr' 而不是 'NULL' 或 '0' (零) |
MISRACPP202X-0087-a | 指向虚拟基类的指针只能通过 dynamic_cast 转换为指向派生类的指针 |
MISRACPP202X-0089-a | 不得使用 C 语言风格的强制类型转换(除 void 强制类型转换)和函数符号式强制类型转换(除了显式的构造函数调用) |
MISRACPP202X-0090-a | 强制类型转换不应从指针或引用的类型中删除任何 'const' 或 'volatile' 限定 |
MISRACPP202X-0096-a | 避免重载逻辑运算符 AND、OR(&&、||) |
MISRACPP202X-0096-b | 避免重载逗号运算符 "," |
MISRACPP202X-0097-a | 不要将数组类型的表达式传递给带有指针或数组类型参数的函数 |
MISRACPP202X-0100-a | 不得重载一元 & 运算符 |
MISRACPP202X-0105-a | 不得使用逗号运算符 |
MISRACPP202X-0110-a | 构成 'switch'、'while'、'do...while' 或 'for' 语句体的语句应该是一个复合语句 |
MISRACPP202X-0110-b | 'if' 和 'else' 后面应该跟一个复合语句 |
MISRACPP202X-0125-a | 任何 goto 语句引用的标签应该被声明在相同的块中,或在关闭 goto 语句的块中 |
MISRACPP202X-0133-a | 全局命名空间应只能包含 main() 和命名空间的声明 |
MISRACPP202X-0134-a | main 标识符不能用于全局函数 main 以外的函数 |
MISRACPP202X-0135-a | 头文件中不应有未命名的名称空间 |
MISRACPP202X-0143-a | 具有自动存储方式的对象的地址不得被赋值给在第一个对象已不复存在之后还持续存在的对象 |
MISRACPP202X-0143-b | 通过引用捕获本地对象的 lambda 不应被赋值给有更长生命周期的变量 |
MISRACPP202X-0145-a | 不要使用递归 |
MISRACPP202X-0146-a | 每个变量都应该在单独的声明语句中声明 |
MISRACPP202X-0147-a | 禁止使用不同的默认参数值来重定义继承的虚拟函数 |
MISRACPP202X-0148-a | 不应使用标识符 va_list、va_arg、va_start、va_end、va_copy |
MISRACPP202X-0150-a | 具有非 void 返回类型的函数的所有退出路径都应具有带有表达式的显式 return 语句 |
MISRACPP202X-0152-a | 避免在初始化之前使用 |
MISRACPP202X-0158-a | 不得使用联合体 |
MISRACPP202X-0159-a | 不要将成员变量声明为位域 |
MISRACPP202X-0162-a | 由 signed 整型命名的位域应该有超过一位的长度 |
MISRACPP202X-0163-a | 类不应从虚基类派生 |
MISRACPP202X-0165-a | 在同一层次结构中,基类不能同时具有虚拟及非虚拟的属性 |
MISRACPP202X-0171-a | 不要使用正在构建的对象的动态类型 |
MISRACPP202X-0171-b | 不要使用正在销毁的对象的动态类型 |
MISRACPP202X-0173-a | 允许转换的构造函数应该使用 explicit 修饰 |
MISRACPP202X-0173-b | 用户转换强制转换运算符应该使用 explicit 修饰 |
MISRACPP202X-0187-a | 异常对象不应具有指针类型 |
MISRACPP202X-0207-a | 使用多个包含保护 |
MISRACPP202X-0208-a | 非标准字符不应该用于 #include 指令的头文件名称中 |
MISRACPP202X-0210-a | #include 指令后面应当添加 <filename> 或是 "filename" |
MISRACPP202X-0212-a | 不应使用预处理器运算符 # 和 ## |
MISRACPP202X-0222-a | 某些标准库函数返回的指针不应在对相同或相关函数的后续调用之后使用 |
MISRACPP202X-0239-a | 指向成员虚函数的指针应只测试是否与空指针常量相等 |
MISRACPP202X-0280-a | 以后不要将参数用于 std::forward |
MISRACPP202X-0280-b | 不要依赖于从对象移动来的值 |
MISRACPP202X-0320-a | 应结束八进制和十六进制转义序列 |
MISRACPP202X-0324-a | 不要在删除点上时删除类不完整的对象 |
MISRACPP202X-0343-a | 每个重写虚函数都应使用 override 或 final 说明符声明 |
MISRACPP202X-0343-b | 在成员函数声明中,只能指定 virtual、override 或 final 中的一个 |
MISRACPP202X-0359-a | 不要从不应该返回值的函数中返回 |
MISRACPP202X-0370-a | 作为 # 或 ## 操作符的操作对象使用的宏参数,本身要进行进一步的宏替换,所以只能作为这些操作符的操作对象使用 |
PREPROC-27 | 不要在 #undef 指令中使用'bool'、'false' 或 'true' 标识符 |
更新规则
类别 ID | 规则 ID |
---|---|
DISA ASD STIG | APSC_DV-001995-c, APSC_DV-002290-d, APSC_DV-002520-e, APSC_DV-002530-e, APSC_DV-002550-e, APSC_DV-002560-e, APSC_DV-002590-b, APSC_DV-002590-d |
AUTOSAR C++14 编码指南 | AUTOSAR-A0_1_1-a, AUTOSAR-A0_1_4-a, AUTOSAR-A0_4_4-a, AUTOSAR-A12_0_1-a, AUTOSAR-A12_1_2-a, AUTOSAR-A12_1_3-a, AUTOSAR-A27_0_1-b, AUTOSAR-A27_0_2-a, AUTOSAR-A27_0_2-b, AUTOSAR-A5_2_5-a, AUTOSAR-A5_2_5-d, AUTOSAR-A5_2_6-a, AUTOSAR-A5_3_2-a, AUTOSAR-A5_6_1-a, AUTOSAR-A6_5_3-a, AUTOSAR-A9_3_1-a, AUTOSAR-A9_6_2-a, AUTOSAR-M0_1_2-ac, AUTOSAR-M0_3_1-b, AUTOSAR-M0_3_1-d, AUTOSAR-M0_3_1-e, AUTOSAR-M0_3_1-f, AUTOSAR-M0_3_1-g, AUTOSAR-M0_3_2-a, AUTOSAR-M14_6_1-a, AUTOSAR-M16_0_7-a, AUTOSAR-M17_0_5-a, AUTOSAR-M18_7_1-a, AUTOSAR-M3_4_1-a, AUTOSAR-M3_4_1-b, AUTOSAR-M5_0_16-a, AUTOSAR-M5_0_6-a, AUTOSAR-M6_2_3-a, AUTOSAR-M6_4_3-c, AUTOSAR-M6_4_4-a, AUTOSAR-M8_5_2-b, AUTOSAR-M9_3_3-a |
流分析 | BD-API-BADPARAM, BD-API-STRSIZE, BD-API-VALPARAM, BD-PB-ARRAY, BD-PB-CC, BD-PB-MCCSTR, BD-PB-MODSTR, BD-PB-NORETDECL, BD-PB-NP, BD-PB-OVERFNZT, BD-PB-OVERFWR, BD-PB-OVERFWR, BD-PB-UCMETH, BD-PB-VOVR, BD-PB-WRRSTR, BD-PB-ZERO, BD-SECURITY-ARRAY, BD-TRS-FRC |
SEI CERT C | CERT_C-API01-a, CERT_C-ARR30-a, CERT_C-ARR38-b, CERT_C-ARR38-d, CERT_C-ARR39-a, CERT_C-CON35-a, CERT_C-CON37-a, CERT_C-DCL06-a, CERT_C-DCL19-a, CERT_C-DCL22-a, CERT_C-ENV01-c, CERT_C-ERR33-c, CERT_C-EXP08-b, CERT_C-EXP34-a, CERT_C-EXP35-a, CERT_C-EXP37-a, CERT_C-EXP37-b, CERT_C-FIO24-a, CERT_C-FIO37-a, CERT_C-FIO45-a, CERT_C-FLP03-a, CERT_C-FLP32-a, CERT_C-INT10-a, CERT_C-INT31-a, CERT_C-INT31-h, CERT_C-INT31-i, CERT_C-INT31-j, CERT_C-INT31-k, CERT_C-INT31-l, CERT_C-INT31-m, CERT_C-INT31-n, CERT_C-INT33-a, CERT_C-MSC19-a, CERT_C-MSC19-b, CERT_C-MSC22-a, CERT_C-MSC33-a, CERT_C-POS30-a, CERT_C-POS44-a, CERT_C-POS54-c, CERT_C-SIG00-a, CERT_C-SIG01-a, CERT_C-SIG02-a, CERT_C-STR03-a, CERT_C-STR30-b, CERT_C-STR31-a, CERT_C-STR31-b, CERT_C-STR32-a |
SEI CERT C++ | CERT_CPP-ERR52-a, CERT_CPP-EXP60-a, CERT_CPP-OOP57-a, CERT_CPP-OOP57-b, CERT_CPP-STR50-b, CERT_CPP-STR50-c, CERT_CPP-STR51-a |
编码规范 | CODSTA-02, CODSTA-109, CODSTA-152, CODSTA-156_a, CODSTA-156_b, CODSTA-157, CODSTA-161_a, CODSTA-163_a, CODSTA-163_b, CODSTA-164_a, CODSTA-164_b, CODSTA-165_a, CODSTA-165_b, CODSTA-165_c, CODSTA-196, CODSTA-222, CODSTA-29 |
C++ 编码规范 | CODSTA-CPP-78, CODSTA-CPP-88, CODSTA-CPP-93, CODSTA-CPP-94 |
常见缺陷列表 | CWE-119-a, CWE-119-e, CWE-119-f, CWE-125-a, CWE-20-a, CWE-362-b, CWE-476-a, CWE-787-a, CWE-787-d |
High Integrity C++ | HICPP-1_2_1-h, HICPP-1_2_1-i, HICPP-3_5_1-b, HICPP-5_2_1-a, HICPP-5_2_1-c, HICPP-5_5_1-a, HICPP-6_3_1-a, HICPP-6_4_1-a, HICPP-9_1_1-a, HICPP-9_1_4-a |
联合攻击战斗机 | JSF-020, JSF-021_b, JSF-105, JSF-115, JSF-136_a, JSF-136_b, JSF-209, JSF-209_b |
MISRA C 1998 | MISRA-054 |
MISRA C 2004 | MISRA2004-14_3, MISRA2004-15_1, MISRA2004-16_10, MISRA2004-19_11_b, MISRA2004-20_7, MISRA2004-20_8_b, MISRA2004-6_3, MISRA2004-6_3_b, MISRA2004-8_7, MISRA2004-9_2_b |
MISRA C++ 2008 | MISRA2008-0_1_2_aa, MISRA2008-0_1_6, MISRA2008-0_3_1_a, MISRA2008-0_3_1_b, MISRA2008-0_3_1_c, MISRA2008-0_3_1_e, MISRA2008-0_3_1_h, MISRA2008-0_3_2, MISRA2008-14_6_1, MISRA2008-16_0_7_b, MISRA2008-17_0_5, MISRA2008-18_7_1_b, MISRA2008-3_4_1_a, MISRA2008-3_4_1_b, MISRA2008-5_0_16_a, MISRA2008-5_0_6_a, MISRA2008-6_2_3, MISRA2008-6_4_3_a, MISRA2008-6_4_4, MISRA2008-8_5_2_b, MISRA2008-9_3_2_b, MISRA2008-9_3_3 |
MISRA C 2012(遗留) | MISRA2012-DIR-4_11, MISRA2012-DIR-4_14_a, MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_1_b, MISRA2012-DIR-4_1_c, MISRA2012-DIR-4_1_e, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_6_a, MISRA2012-DIR-4_6_b, MISRA2012-RULE-10_1_a, MISRA2012-RULE-10_3_a, MISRA2012-RULE-10_3_b, MISRA2012-RULE-10_4_a, MISRA2012-RULE-10_4_b, MISRA2012-RULE-10_5_a, MISRA2012-RULE-10_5_b, MISRA2012-RULE-10_5_c, MISRA2012-RULE-10_6, MISRA2012-RULE-10_7_a, MISRA2012-RULE-10_7_b, MISRA2012-RULE-10_8, MISRA2012-RULE-14_3_zc, MISRA2012-RULE-16_1_b, MISRA2012-RULE-16_2, MISRA2012-RULE-18_1_a, MISRA2012-RULE-1_3_a, MISRA2012-RULE-1_3_e, MISRA2012-RULE-20_9_b, MISRA2012-RULE-21_10, MISRA2012-RULE-21_12, MISRA2012-RULE-21_14, MISRA2012-RULE-21_17_a, MISRA2012-RULE-21_17_b, MISRA2012-RULE-21_18, MISRA2012-RULE-21_4_a, MISRA2012-RULE-21_5_b, MISRA2012-RULE-2_2_b, MISRA2012-RULE-8_9, MISRA2012-RULE-9_3 |
MISRA C 2012 | MISRAC2012-DIR_4_1-a, MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_1-c, MISRAC2012-DIR_4_1-e, MISRAC2012-DIR_4_1-h, MISRAC2012-DIR_4_11-a, MISRAC2012-DIR_4_14-a, MISRAC2012-DIR_4_6-a, MISRAC2012-DIR_4_6-b, MISRAC2012-RULE_10_1-a, MISRAC2012-RULE_10_3-a, MISRAC2012-RULE_10_3-b, MISRAC2012-RULE_10_4-a, MISRAC2012-RULE_10_4-b, MISRAC2012-RULE_10_5-a, MISRAC2012-RULE_10_5-b, MISRAC2012-RULE_10_5-c, MISRAC2012-RULE_10_6-a, MISRAC2012-RULE_10_7-a, MISRAC2012-RULE_10_7-b, MISRAC2012-RULE_10_8-a, MISRAC2012-RULE_14_3-ac, MISRAC2012-RULE_16_1-b, MISRAC2012-RULE_16_2-a, MISRAC2012-RULE_18_1-a, MISRAC2012-RULE_1_3-a, MISRAC2012-RULE_1_3-e, MISRAC2012-RULE_20_9-b, MISRAC2012-RULE_21_10-a, MISRAC2012-RULE_21_12-a, MISRAC2012-RULE_21_14-a, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_21_17-b, MISRAC2012-RULE_21_18-a, MISRAC2012-RULE_21_4-a, MISRAC2012-RULE_21_5-b, MISRAC2012-RULE_2_2-b, MISRAC2012-RULE_8_9-a, MISRAC2012-RULE_9_3-a |
面向对象 | OOP-36 |
最优化 | OOPT-01, OPT-03 |
OWASP Top 10 2019 | OWASP2019-API3-b, OWASP2019-API3-e, OWASP2019-API3-g |
移植性 | PORT-31 |
安全性 | SECURITY-01, SECURITY-02 |
模板 | TEMPL-12 |
删除规则
规则 ID | 注意 |
---|---|
CERT_C-EXP37-c | 从 CERT C 配置中删除。对于其他配置,可以使用 CODSTA-159 作为替代。 |
MISRA2008-2_10_6_d | 从 MISRA C++ 2008 配置中删除。对于其他配置,可以使用 CODSTA-CPP-88 作为替代。 |
MISRA2012-RULE-1_4_a | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-216 作为替代。 |
MISRA2012-RULE-1_4_b | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-206 作为替代。 |
MISRA2012-RULE-1_4_c | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-207 作为替代。 |
MISRA2012-RULE-1_4_h | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-213 作为替代。 |
MISRA2012-RULE-1_4_i | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-208 作为替代。 |
MISRA2012-RULE-21_11_b | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-108_b 作为替代。 |
MISRAC2012-RULE_1_4-a | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-216 作为替代。 |
MISRAC2012-RULE_1_4-b | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-206 作为替代。 |
MISRAC2012-RULE_1_4-c | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-207 作为替代。 |
MISRAC2012-RULE_1_4-h | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-213 作为替代。 |
MISRAC2012-RULE_1_4-i | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-208 作为替代。 |
MISRAC2012-RULE_21_11-b | 从 MISRA C 2012 配置中删除。对于其他配置,可以使用 CODSTA-108_b 作为替代。 |