在此版本中,我们专注于扩展对环境的支持并增强 C/C++ test 的安全测试功能。
支持环境
新编译器
我们添加了对以下编译器的支持:
编译器名称 | 编译器首字母缩写词 |
---|---|
GNU GCC 8.x | gcc_8 |
GNU GCC 8.x (x86_64) | gcc_8-64 |
IAR Compiler for RL78 v. 3.10.x | iccrl78_3_10 |
弃用的编译器
编译器名称 | 编译器首字母缩写词 |
---|---|
适用于 ADSP SHARC 的 Analog Devices C/C++ 编译器 7.0 | ad21k_7_0 |
适用于 ADSP SHARC 的 Analog Devices C/C++ 编译器 7.0 | adts_7_0 |
CodeSourcery Sourcery G++ Lite 2007q3-51 | csgccarm_4_2 |
请参见 编译器 有关当前支持的编译器的详细信息。
增强的测试用例编辑器
我们扩展了【测试用例编辑器】,以使用在相应数据源中指定的值自动参数化您的测试用例。现在你可以:
扩展的 Compliance Packs
我们扩展了安全合规性软件包,以帮助您强制遵守 CERT C和 CERT C++ 安全标准:
CERT C
- 我们添加了“ SEI CERT C规则”测试配置,可帮助您强制执行 SEI CERT C 编码标准规则。
- 我们扩展了 "SEI CERT C 编码准则”测试配置" ,以帮助您实施 SEI CERT C 编码标准规则 和准则。
CERT C++
- 我们添加了“ SEI CERT C++ 规则”测试配置,可帮助您实施 SEI CERT C++ 编码标准规则。
Compliance Pack 需要激活专用的许可证功能。请与 Parasoft 支持联系,以获取有关 Compliance Pack 许可的更多详细信息。
流量分析改进
- 我们已经改进了流程分析结果的表示形式,以帮助您更好地理解结果。
- 我们对 Flow Analysis 进行了扩展,提供了允许您指定可以检查资源是否打开的功能的选项,以及可以在关闭的资源上安全调用的功能(请参阅 Flow Analysis - 资源选项卡选项)。
- 我们改进了 Flow Analysis 中对 std::nullptr_t 类型的支持。
新的和更新的测试配置
我们添加了以下内置测试配置:
- SEI CERT C++ Rules
- SEI CERT C Rules
- 在完全监视下运行 VxWorks DKM 应用程序(文件系统,WRWB 4.x)
- 运行 VxWorks DKM 单元测试(文件系统,WRWB 4.x)
- 在完全监视下运行 VxWorks RTP 应用程序(文件系统,WRWB 4.x)
- 运行 VxWorks RTP 单元测试(文件系统,WRWB 4.x)
请参见 内置测试配置 有关 C/C++ test 附带的测试配置的列表。
弃用的测试配置
现在不推荐使用以下测试配置:
- CERT C 编码标准
- CRules
- DISA-STIG 编码标准
- Ellemtel
- ISO 26262 建议规则
- MISRA C 2012 旧版
- OWASP 十大安全漏洞
- Parasoft's Recommended FDA C++ Phase 1
- Parasoft's Recommended FDA C++ Phase 2
- Parasoft's Recommended FDA C++ Phase 3
- Parasoft 的推荐规则
- SAMATE Annex A 源代码缺陷
默认情况下,已弃用的测试配置不可用, 但可以作为团队共享或用户定义的测试配置来应用(请参阅 导入测试配置)。现在,它们在以下位置随 C/C++ test 一起提供:[INSTALL_DIR]/configs/deprecated.
新建的和更新的代码分析规则
在此版本中,我们添加了新的静态分析规则以扩展合规性标准的覆盖率;有关新规则和更新规则的列表,请参见 新规则 和 更新规则 。
其他变更
- 我们已经删除了对 Microsoft Team Foundation Server 2008的支持
已解决的 Bugs 和 FRs
Bug/FR ID | 说明 |
---|---|
CPP-18534 | 支持 WindRiver Workbench 4.0 IDE |
CPP-33421 | 添加对 "asm goto" gcc 扩展的支持(Linux 内核模块) |
CPP-39308 | MDK-ARM ARM 6 编译器支持 |
CPP-40407 | 在宏代码中报告违反 SA 规则的行为时,它们会显示在不正确的行中 |
CPP-40551 | 扩展 MISRA2004-11_5 以将 const/volatile 对象的类型转换报告为引用类型 |
CPP-40553 | 新建规则:CODSTA-MCPP-22 在基于范围的 for 循环中的自动声明上使用显式 ref 限定词 |
CPP-40623 | Clang:修复未定义和不匹配的内置函数 |
CPP-40695 | VS2017 插件注册不能是特定于用户的。 |
CPP-40771 | 新建规则 CODSTA-201: 不要本地处理结构化文本数据 |
CPP-40772 | 新建规则 CODSTA-199: 不要在生产代码中使用断言 |
CPP-40773 | 新建规则 OOP-54: 不要增加覆盖或隐藏方法的可访问性 |
CPP-40774 | 新建规则:PORT-29 在类演变过程中启用序列化兼容性 |
CPP-40775 | 新规则 CODSTA-82_b: 不要使用空的无限循环 |
CPP-41516 | CODSTA-16 不会触发枚举或常量类型的大小违规 |
CPP-41517 | RW: 缺少有关 va_list 内置/预声明类型的信息。 |
CPP-41520 | 引用枚举类型会导致自动生成的测试用例的编译问题 |
CPP-41525 | 规则 MISRA2004-10_4(CODSTA-198)不应该报告对非复杂表达式的强制转换 |
CPP-41530 | CODSTA-30作为参考传递的参数的 false positive |
CPP-41541 | 使用 asm 语句时,快速覆盖检测会导致编译错误 |
CPP-41553 | Eclipse 4.8 IDE 支持 |
CPP-41586 | 将宽字符串分配给 wchar_t 类型的指针(Linux 上为 gcc)时,规则 PB-27 不报告冲突 |
CPP-41605 | 错误:在语句表达式内不允许此语句 |
CPP-41611 | 新建规则:JSF-37 |
CPP-41614 | 弃用 Parasoft 的“推荐规则”测试配置 |
CPP-41646 | GNU GCC 8.x 编译器支持 |
CPP-41671 | GNU RL78 v3.10 编译器支持 |
CPP-41709 | Va_list 的 MISRA2012-RULE.21_2_b 和 MISRA2012-RULE.21_2_c 问题。 |
CPP-41741 | 节点“变量”的属性“实体”返回初始化程序中使用的变量 |
CPP-41744 | MISRA2012-RULE-20_12 误警率 |
CPP-41748 | 测试用例编辑器:自动参数化测试用例 |
CPP-41750 | MDK ARM/uVision 5 IDE 支持 |
CPP-41831 | RULE_OUTPUT_CHANGE NAMING-HN 规则中的输出消息不正确 |
CPP-41840 | C/C++ 测试报告中抑制记录中的规则 ID 损坏 |
CPP-41842 | RULE_OUTPUT_CHANGE PB-44 规则中的输出消息应改进 |
CPP-41866 | 在【测试用例编辑器】中创建参数化的测试用例 |
CPP-41868 | 使用 cpptestcc 进行安装时的警告 |
CPP-41871 | 如果没有逻辑行,请不要报告CLLOCRIF、CLLOCRIT、CLLOCRIM 值 |
CPP-41944 | Dtp 服务器集成软件包中缺少 HICPP-16_1_5-a 规则(在 DTP 服务器上不可用) |
CPP-41977 | 从 DTP 导入后重复的违规 |
CPP-42042 | 内部错误:断言在以下位置失败:"lookup.c",第 2738 行 |
CPP-42070 | 添加支持为多个用户安装 VS2017 插件 |
CPP-42075 | 禁用复制时,规则 MRM-40 不应报告违规 |
FA-6689 | 使用 dynamic_cast 时 BD-PB-NP 漏警率 |
FA-6649 | BD-PB-CC 位 AND 上的误警率 |
FA-6611 | 转换资源时 BD-RES-LEAKS 的误警率 |
FA-6453 | 模拟错误地假定对 "&(ptr->field)” 操作进行取消指针引用操作。 |
FA-5769 | BD-PB-CHECKRET 违反消息包含行号 |
新建规则
添加了以下规则:
规则 ID | 标题 |
---|---|
AUTOSAR-A15_5_2-b | 不得使用 'cstdlib’ 库中的库函数'abort()'、'quick_exit()'和 '_Exit()’ |
AUTOSAR-A15_5_3-b | 切勿允许从 destructor、deallocation 和 swap 引发异常 |
AUTOSAR-A15_5_3-c | 不要从析构函数中抛出 |
AUTOSAR-A15_5_3-d | 至少应有一个异常处理程序来捕获所有其他未处理的异常 |
AUTOSAR-A15_5_3-e | 空抛出 (throw;) 只能用于捕获处理程序的复合语句中 |
AUTOSAR-A15_5_3-f | 仅在程序启动后和程序终止前才引发异常 |
AUTOSAR-A15_5_3-g | 代码中显式抛出的每个异常都应在所有可能导致该问题的调用路径中具有兼容类型的处理程序。 |
AUTOSAR-A15_5_3-h | 如果函数的声明包含异常规范,则该函数只能抛出指定类型的异常 |
AUTOSAR-A15_5_3-i | 在全局或命名空间范围内调用的函数不得抛出未处理的异常 |
AUTOSAR-A15_5_3-j | 总是捕获异常 |
AUTOSAR-A15_5_3-k | 正确定义退出处理程序 |
AUTOSAR-A5_1_4-b | 切勿通过引用从外部 lambda 捕获本地对象 |
AUTOSAR-A5_1_4-c | 通过引用捕获本地对象的 lambda 不应分配给生命周期更长的变量 |
BD-CO-EMPCON | 不要将空容器迭代器传递给标准算法作为目标 |
BD-CO-STRMOD | 使用有效的引用、指针和迭代器来引用 basic_string 的元素 |
BD-PB-NEWHAN | 正确定义新的处理程序 |
BD-PB-POLARR | 不要多态处理数组 |
BD-PB-PTRCMP | 不要比较两个不相关的指针 |
BD-PB-PTRVALUE | 不要将已经拥有的指针值存储在不相关的智能指针中 |
BD-PB-SUBSEQMOVE | 不要依赖移出对象的值 |
BD-PB-TERMHAN | 正确定义终止处理程序 |
BD-PB-UNEXPHAN | 正确定义意外的处理程序 |
BD-PB-VALRANGE | 确保容器索引在有效范围内 |
CERT_C-ARR02-a | 使用初始化程序在数组声明中明确指定数组范围 |
CERT_C-DCL10-a | 格式字符串的标签数量和 'printf’函数调用中相应参数的数量之间应该没有区别 |
CERT_C-DCL11-a | 格式字符串中的 '%s' 或 '%c' 标记与其在 'printf’函数调用中的相应参数之间不应存在不匹配 |
CERT_C-DCL11-b | 格式字符串中的 '%f’标记与其在 'printf’函数调用中对应的参数之间不应存在不匹配 |
CERT_C-DCL11-c | 格式字符串中的 '%i' 或 '%d’标记与其在 'printf’函数调用中的相应参数之间不应存在不匹配 |
CERT_C-DCL11-d | 格式字符串中的 '%u’标记与其在 'printf’函数调用中的对应参数之间不应存在不匹配 |
CERT_C-DCL11-e | 格式字符串中的 '%p’标记与其在 'printf’函数调用中对应的参数之间不应存在不匹配 |
CERT_C-DCL11-f | 格式字符串的标签数量和 'printf’函数调用中相应参数的数量之间应该没有区别 |
CERT_C-ERR01-a | 错误指示器 errno 不得使用 |
CERT_C-ERR02-a | 不得使用标准库输入/输出功能 |
CERT_C-ERR06-a | 不要使用断言 |
CERT_C-ERR07-b | 不得使用标准库输入/输出功能 |
CERT_C-EXP15-a | 可疑使用分号 |
CERT_C-FIO22-a | 确保释放资源 |
CERT_C-FIO24-a | 访问文件时避免竞争条件 |
CERT_C-FIO32-a | 防止文件名注入 |
CERT_C-INT08-a | 避免整数溢出 |
CERT_C-INT15-a | 不应使用 char、int、short、long、float 和 double 的基本类型,但应使用 typedef'd 定义特定长度的等效项 |
CERT_C-MEM00-d | 不要使用已释放的资源 |
CERT_C-MEM00-e | 确保释放资源 |
CERT_C-MEM02-a | 赋值运算符应具有兼容类型的操作数 |
CERT_C-MEM02-b | 不要将函数返回值分配给不兼容类型的变量 |
CERT_C-MEM04-a | 应检查传递给库函数的值的有效性 |
CERT_C-MEM05-a | 不要使用递归 |
CERT_C-MEM05-b | 确保可变长度数组的大小在有效范围内 |
CERT_C-MEM07-a | 应检查传递给库函数的值的有效性 |
CERT_C-MSC40-a | 具有外部链接的函数的内联定义不应包含静态对象的定义和使用 |
CERT_C-MSC41-a | 不要硬编码字符串文字 |
CERT_C-STR05-a | 字符串文字不得修改 |
CERT_CPP-CON50-a | 不要破坏另一个线程的互斥量 |
CERT_CPP-CON51-a | 不要直接在互斥锁上调用 lock() |
CERT_CPP-CON52-a | 修改位字段时使用锁来防止竞争情况 |
CERT_CPP-CON53-a | 不要以不同的顺序获取锁 |
CERT_CPP-CON54-a | Wrap 功能可以在循环中虚假唤醒 |
CERT_CPP-CON55-a | 当多个线程在同一条件变量上等待时,请勿使用 'notify_one()’函数 |
CERT_CPP-CON56-a | 避免双重锁定 |
CERT_CPP-CTR50-a | 确保容器索引在有效范围内 |
CERT_CPP-CTR51-a | 迭代时不要修改容器 |
CERT_CPP-CTR52-a | 不要将空容器迭代器传递给标准算法作为目标 |
CERT_CPP-CTR53-a | 不要使用实际上不是范围的迭代器范围 |
CERT_CPP-CTR53-b | 不要比较来自不同容器的迭代器 |
CERT_CPP-CTR54-a | 不要比较来自不同容器的迭代器 |
CERT_CPP-CTR54-b | 不要比较两个不相关的指针 |
CERT_CPP-CTR55-a | 不要从迭代器中添加或减去值大于1的常量 |
CERT_CPP-CTR56-a | 不要多态地处理数组 |
CERT_CPP-CTR56-b | 指向派生类对象数组的指针不应转换为基类指针 |
CERT_CPP-CTR56-c | 不要多态处理数组 |
CERT_CPP-CTR57-a | 对于关联容器,切勿使用比较函数为相等的值返回 true |
CERT_CPP-CTR58-a | 使谓词为 const 纯函数 |
CERT_CPP-DCL50-a | 函数不得使用可变数量的参数定义 |
CERT_CPP-DCL51-a | 请勿使用名称以下划线开头的 #define 或 #undef 标识符 |
CERT_CPP-DCL51-b | 不要重新定义已保留文字 |
CERT_CPP-DCL51-c | 请勿使用 #define 或 #undef 标识符 'defined’ |
CERT_CPP-DCL51-d | 标准库宏、对象和函数的名称不得重复使用 |
CERT_CPP-DCL51-e | 标准库宏、对象和函数的名称不得重复使用(C90) |
CERT_CPP-DCL51-f | 标准库宏、对象和函数的名称不得重复使用(C99) |
CERT_CPP-DCL52-a | 不要将引用类型限定为 'const’或 'volatile’ |
CERT_CPP-DCL53-a | 始终在文件范围内声明函数 |
CERT_CPP-DCL53-b | 在局部或函数原型范围中声明的标识符不应隐藏在全局或命名空间范围中声明的标识符 |
CERT_CPP-DCL54-a | 始终一起提供新建和删除 |
CERT_CPP-DCL55-a | 指向结构的指针不应传递给可以将数据复制到用户空间的函数 |
CERT_CPP-DCL56-a | 通过将非本地静态对象替换为本地静态对象,避免跨翻译单元的初始化顺序问题 |
CERT_CPP-DCL57-a | 切勿允许从 destructor、deallocation 和 swap 引发异常 |
CERT_CPP-DCL57-b | 总是捕获异常 |
CERT_CPP-DCL58-a | 不要修改标准 'std’ 和 and 'posix’ 命名空间 |
CERT_CPP-DCL59-a | 头文件中不得有未命名的命名空间 |
CERT_CPP-DCL60-a | 类名、并名或枚举名(包括限定符,如果有的话)应是唯一标识符 |
CERT_CPP-ERR50-a | 用 'std::atexit()’或 'std::at_quick_exit()’注册的函数的执行不应通过异常退出 |
CERT_CPP-ERR50-b | 切勿允许从 destructor、deallocation 和 swap 引发异常 |
CERT_CPP-ERR50-c | 不要从析构函数中抛出 |
CERT_CPP-ERR50-d | 至少应有一个异常处理程序来捕获所有其他未处理的异常 |
CERT_CPP-ERR50-e | 空抛出 (throw;) 只能在 catch 处理程序的复合语句中使用 |
CERT_CPP-ERR50-f | 仅在程序启动后和程序终止前才引发异常 |
CERT_CPP-ERR50-g | 代码中显式抛出的每个异常都应在所有可能导致该问题的调用路径中具有兼容类型的处理程序。 |
CERT_CPP-ERR50-h | 如果函数的声明包含异常规范,则该函数只能抛出指定类型的异常 |
CERT_CPP-ERR50-i | 在全局或命名空间范围内调用的函数不得抛出未处理的异常 |
CERT_CPP-ERR50-j | 总是捕获异常 |
CERT_CPP-ERR50-k | 正确定义退出处理程序 |
CERT_CPP-ERR50-l | 不得使用 'cstdlib’ 库中的库函数'abort()'、'quick_exit()'和 '_Exit()’ |
CERT_CPP-ERR51-a | 总是捕获异常 |
CERT_CPP-ERR51-b | 代码中显式抛出的每个异常都应在所有可能导致该问题的调用路径中具有兼容类型的处理程序。 |
CERT_CPP-ERR52-a | 不得使用 setjmp 宏和 longjmp 函数 |
CERT_CPP-ERR52-b | 不得使用标准头文件 filesetjmp.h |
CERT_CPP-ERR53-a | 类构造函数或析构函数的功能尝试块实现的处理程序不得引用此类或其基类中的非静态成员。 |
CERT_CPP-ERR54-a | 如果在单个 try-catch 语句或 function-try-block 中为派生类及其部分或全部基数提供了多个处理程序,则这些处理程序应按最源于基类的顺序排序 |
CERT_CPP-ERR55-a | 如果函数的声明包含异常规范,则该函数只能抛出指定类型的异常 |
CERT_CPP-ERR56-a | 确保释放资源 |
CERT_CPP-ERR57-a | 确保释放资源 |
CERT_CPP-ERR58-a | 仅在程序启动后和程序终止前才引发异常 |
CERT_CPP-ERR59-a | 不要跨执行边界抛出异常 |
CERT_CPP-ERR60-a | 异常对象不可复制构造 |
CERT_CPP-ERR60-b | 从 'std::exception’继承的类的显式声明的复制构造函数应具有非抛出的异常规范 |
CERT_CPP-ERR61-a | 一个类型异常的类应始终通过引用捕获 |
CERT_CPP-ERR61-b | 根据值抛出,根据引用捕获 |
CERT_CPP-ERR62-a | 不得使用库 stdlib.h 中的库函数 atof、atoi 和 atol |
CERT_CPP-EXP50-a | 在标准允许的任何评估顺序下,表达式的值应相同 |
CERT_CPP-EXP50-b | 不要编写依赖于函数参数求值顺序的代码 |
CERT_CPP-EXP50-c | 不要编写依赖于函数指示符和函数参数求值顺序的代码 |
CERT_CPP-EXP50-d | 不要编写依赖于涉及函数调用的表达式求值顺序的代码 |
CERT_CPP-EXP50-e | 在序列点之间,对象的存储值最多只能通过对表达式的求值来修改 |
CERT_CPP-EXP50-f | 不要编写依赖于函数调用求值顺序的代码 |
CERT_CPP-EXP51-a | 不要多态处理数组 |
CERT_CPP-EXP52-a | Sizeof 运算符的操作数不得包含任何具有副作用的表达式 |
CERT_CPP-EXP52-b | 由 volatile 左值指定的对象不应在 sizeof 运算符的操作数中访问 |
CERT_CPP-EXP52-c | 引起副作用的函数调用不应是 sizeof 运算符的操作数 |
CERT_CPP-EXP53-a | 避免在初始化之前使用 |
CERT_CPP-EXP54-a | 不要使用已释放的资源 |
CERT_CPP-EXP54-b | 具有自动存储功能的对象的地址不应从函数返回 |
CERT_CPP-EXP54-c | 具有自动存储功能的对象的地址不应分配给在第一个对象停止存在之后可能仍然存在的另一个对象 |
CERT_CPP-EXP55-a | 类型转换不能移除指针或引用类型中的 'const’ 或 'volatile’限定 |
CERT_CPP-EXP56-a | 不要调用语言链接不匹配的函数 |
CERT_CPP-EXP57-a | 删除时不要删除类不完整的对象 |
CERT_CPP-EXP57-b | 不能在指向不完整类型的指针和任何其他类型的指针之间进行转换 |
CERT_CPP-EXP58-a | 正确使用宏作为变量参数 |
CERT_CPP-EXP60-a | 不要跨执行边界传递非标准布局类型的对象 |
CERT_CPP-EXP61-a | 永远不要返回通过引用捕获本地对象的 lambdas |
CERT_CPP-EXP61-b | 切勿通过引用从外部 lambda 捕获本地对象 |
CERT_CPP-EXP61-c | 通过引用捕获本地对象的 lambda 不应分配给生命周期更长的变量 |
CERT_CPP-EXP63-a | 不要依赖移出对象的值 |
CERT_CPP-FIO50-a | 在没有中间冲洗或定位调用的情况下,请勿从流中交替输入和输出 |
CERT_CPP-FIO51-a | 确保释放资源 |
CERT_CPP-INT50-a | 具有枚举基础类型的表达式应仅具有与枚举的枚举数对应的值 |
CERT_CPP-MEM50-a | 不要使用已释放的资源 |
CERT_CPP-MEM51-a | 在对 new/malloc 和 delete/free 的相应调用中使用相同的形式 |
CERT_CPP-MEM51-b | 取消分配数组时,始终提供空括号([])进行删除 |
CERT_CPP-MEM51-c | 对于具有非平凡析构函数的类,应声明复制构造函数和复制赋值运算符 |
CERT_CPP-MEM52-a | 检查 new 的返回值 |
CERT_CPP-MEM52-b | 不要在函数参数列表中分配资源,因为函数参数的求值顺序不确定 |
CERT_CPP-MEM53-a | 不要为具有构造函数的对象调用 malloc/realloc |
CERT_CPP-MEM55-a | 分配失败时,用户定义的 'new’运算符应引发 'std::bad_alloc’异常 |
CERT_CPP-MEM56-a | 不要将已经拥有的指针值存储在不相关的智能指针中 |
CERT_CPP-MSC50-a | 不要使用 rand() 函数生成伪随机数 |
CERT_CPP-MSC51-a | 正确的种子伪随机数生成器 |
CERT_CPP-MSC52-a | 具有非无效返回类型的函数的所有退出路径应具有带有表达式的显式 return 语句 |
CERT_CPP-MSC53-a | 永远不要从不应返回的函数中返回 |
CERT_CPP-MSC54-a | 正确定义信号处理程序 |
CERT_CPP-OOP50-a | 避免从构造函数调用虚函数 |
CERT_CPP-OOP50-b | 避免从析构函数调用虚函数 |
CERT_CPP-OOP50-c | 不要从其任何构造函数中调用类的虚函数 |
CERT_CPP-OOP50-d | 不要从其析构函数调用类的虚函数 |
CERT_CPP-OOP51-a | 避免切片函数参数/返回值 |
CERT_CPP-OOP52-a | 在用作具有虚拟功能的基类的类中定义虚拟析构函数 |
CERT_CPP-OOP53-a | 按照声明的顺序列出初始化列表中的成员 |
CERT_CPP-OOP54-a | 检查运算符 = 中对 self 的赋值 |
CERT_CPP-OOP55-a | 强制转换不得将指向函数的指针转换为任何其他指针类型,包括指向函数类型的指针 |
CERT_CPP-OOP56-a | 正确定义终止处理程序 |
CERT_CPP-OOP56-b | 正确定义意外的处理程序 |
CERT_CPP-OOP56-c | 正确定义新的处理程序 |
CERT_CPP-OOP57-a | 不要使用 C 标准库函数初始化具有非平凡类类型的对象 |
CERT_CPP-OOP57-b | 不要将非标准布局类类型的对象与 C 标准库函数进行比较 |
CERT_CPP-OOP58-a | 复制操作不得更改源对象 |
CERT_CPP-STR50-a | 使用向量和字符串而不是数组 |
CERT_CPP-STR51-a | 避免空指针解引用 |
CERT_CPP-STR52-a | 使用有效的引用、指针和迭代器来引用 basic_string 的元素 |
CERT_CPP-STR53-a | 确保容器索引在有效范围内 |
CODSTA-197 | 不要指定用字符串文字初始化的字符数组的边界 |
CODSTA-199 | 不要使用断言 |
CODSTA-200 | 使用初始化程序在数组声明中明确指定数组范围 |
CODSTA-201 | 不要本地处理结构化文本数据 |
CODSTA-202 | 具有外部链接的函数的内联定义不应包含静态对象的定义和使用 |
CODSTA-203 | 不要硬编码字符串文字 |
CODSTA-82_b | 不要使用空的无限循环 |
CODSTA-CPP-93 | 不要使用 C 标准库函数初始化具有非平凡类类型的对象 |
CODSTA-CPP-94 | 不要将非标准布局类类型的对象与 C 标准库函数进行比较 |
CODSTA-CPP-95 | 不要修改标准 'std’ 和 and 'posix’ 命名空间 |
CODSTA-CPP-96 | 不要调用语言链接不匹配的函数 |
CODSTA-CPP-97 | 不要将引用类型限定为 'const’或 'volatile’ |
CODSTA-CPP-98 | 复制操作不得更改源对象 |
CODSTA-MCPP-17_b | 切勿通过引用从外部 lambda 捕获本地对象 |
CODSTA-MCPP-17_c | 通过引用捕获本地对象的 lambda 不应分配给生命周期更长的变量 |
CODSTA-MCPP-22 | 在基于范围的 'for 循环中的自动声明上使用显式 ref 限定词 |
EXCEPT-19 | 异常对象不可复制构造 |
EXCEPT-20 | 从 'std::exception’继承的类的显式声明的复制构造函数应具有非抛出的异常规范 |
JSF-037 | 文件应仅直接包含标头,标头包含编译所需的声明和定义 |
MISRA2008-15_5_3_b | 切勿允许从 destructor、deallocation 和 swap 引发异常 |
MISRA2008-15_5_3_c | 不要从析构函数中抛出 |
MISRA2008-15_5_3_d | 至少应有一个异常处理程序来捕获所有其他未处理的异常 |
MISRA2008-15_5_3_e | 空抛出 (throw;) 只能在 catch 处理程序的复合语句中使用 |
MISRA2008-15_5_3_f | 仅在程序启动后和程序终止前才引发异常 |
MISRA2008-15_5_3_g | 代码中显式抛出的每个异常都应在所有可能导致该问题的调用路径中具有兼容类型的处理程序。 |
MISRA2008-15_5_3_h | 如果函数的声明包含异常规范,则该函数只能抛出指定类型的异常 |
MISRA2008-15_5_3_i | 在全局或命名空间范围内调用的函数不得抛出未处理的异常 |
MISRA2008-15_5_3_j | 总是捕获异常 |
MISRA2008-15_5_3_k | 正确定义退出处理程序 |
MRM-53 | 分配失败时,用户定义的 'new’运算符应引发 'std::bad_alloc’异常 |
OOP-54 | 不要增加覆盖或隐藏方法的可访问性 |
OPT-41 | 文件应仅直接包含包含编译该文件所需的声明和定义的头 |
PB-74 | 不要从迭代器中添加或减去值大于1的常量 |
PB-75 | 不得使用 'cstdlib’ 库中的库函数'abort()'、'quick_exit()'和 '_Exit()’ |
PORT-29 | 指向结构的指针不应传递给将数据写入文件的函数 |
PORT-30 | 不要跨执行边界抛出异常 |
PORT-31 | 不要跨执行边界传递非标准布局类型的对象 |
SECURITY-50 | 当多个线程在同一条件变量上等待时,请勿使用 'notify_one()’函数 |
更新规则
我们更新了以下静态分析规则以改善分析结果:
规则类别 | 规则 IDs |
---|---|
AUTOSAR C++14 编码准则 | AUTOSAR-A12_0_1-a, AUTOSAR-A15_1_4-a, AUTOSAR-A15_5_2-a, AUTOSAR-A15_5_3-a, AUTOSAR-A15_5_3-b, AUTOSAR-A2_14_2-a, AUTOSAR-A5_2_2-a, AUTOSAR-A5_2_3-a, AUTOSAR-A7_1_1-a, AUTOSAR-M0_3_1-f, AUTOSAR-M4_5_3-a, AUTOSAR-M5_0_21-a, AUTOSAR-M5_2_8-a |
流量分析 | BD-CO-ITINVCOMP, BD-CO-ITMOD, BD-PB-NP, BD-PB-STREAMINOUT, BD-PB-VARARGS, BD-PB-VCTOR, BD-PB-VDTOR, BD-RES-FREE, BD-RES-LEAKS, BD-TRS-DLOCK, BD-TRS-DSTRLOCK |
SEI CERT C | CERT_C-CON30-a, CERT_C-CON31-a, CERT_C-CON31-b, CERT_C-CON35-a, CERT_C-DCL00-a, CERT_C-ERR33-c, CERT_C-EXP05-a, CERT_C-EXP32-a, CERT_C-EXP34-a, CERT_C-EXP40-a, CERT_C-FIO22-a, CERT_C-FIO39-a, CERT_C-FIO42-a, CERT_C-FIO46-a, CERT_C-INT13-a, CERT_C-INT16-a, CERT_C-INT36-a, CERT_C-MEM00-d, CERT_C-MEM00-e, CERT_C-MEM01-a, CERT_C-MEM12-a, CERT_C-MEM30-a, CERT_C-MEM31-a, CERT_C-MSC19-b, CERT_C-MSC39-a, CERT_C-POS48-a, CERT_C-POS54-c, CERT_C-STR05-a, CERT_C-STR09-a, CERT_C-STR10-a, CERT_C-STR30-a, CERT_C-WIN30-a |
SEI CERT C++ | CERT_CPP-CON50-a, CERT_CPP-CON56-a, CERT_CPP-CTR51-a, CERT_CPP-CTR53-b, CERT_CPP-CTR54-a, CERT_CPP-DCL51-e, CERT_CPP-DCL51-f, CERT_CPP-DCL57-a, CERT_CPP-ERR50-a, CERT_CPP-ERR50-b, CERT_CPP-ERR56-a, CERT_CPP-ERR57-a, CERT_CPP-EXP54-a, CERT_CPP-EXP55-a, CERT_CPP-EXP58-a, CERT_CPP-FIO50-a, CERT_CPP-FIO51-a, CERT_CPP-MEM50-a, CERT_CPP-OOP50-c, CERT_CPP-OOP50-d, CERT_CPP-STR51-a |
编码约定 | CODSTA-16, CODSTA-30, CODSTA-63, CODSTA-65, CODSTA-69 |
C++ 的编码约定 | CODSTA-CPP-11, CODSTA-CPP-53, CODSTA-CPP-66 |
异常 | EXCEPT-01 |
高完整性 C++ | HICPP-12_4_1-b, HICPP-12_4_1-c, HICPP-18_3_1-a, HICPP-5_2_1-c, HICPP-5_4_1-a, HICPP-5_4_1-c, HICPP-5_6_1-a, HICPP-7_1_2-a, HICPP-8_4_1-b |
联合打击战斗机 | JSF-151.1, JSF-185 |
MISRA C 2004 | MISRA2004-11_5, MISRA2004-20_2_a, MISRA2004-20_2_b |
MISRA C++ 2008 | MISRA2008-0_3_1_b, MISRA2008-15_5_3, MISRA2008-15_5_3_b, MISRA2008-2_13_5, MISRA2008-4_5_3, MISRA2008-5_0_21, MISRA2008-5_2_4, MISRA2008-5_2_5, MISRA2008-5_2_8, MISRA2008-7_1_1 |
MISRA C 2012 (Legacy) | MISRA2012-DIR-4_13_a, MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_13_e, MISRA2012-DIR-4_1_b, MISRA2012-RULE-11_8, MISRA2012-RULE-1_3_c, MISRA2012-RULE-21_2_b, MISRA2012-RULE-21_2_c, MISRA2012-RULE-22_1, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_6, MISRA2012-RULE-7_4 |
MISRA C 2012 | MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_13-a, MISRAC2012-DIR_4_13-b, MISRAC2012-DIR_4_13-e, MISRAC2012-RULE_11_8-a, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_21_2-b, MISRAC2012-RULE_21_2-c, MISRAC2012-RULE_22_1-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_7_4-a |
内存和资源管理 | MRM-40 |
可能的错误 | PB-27, PB-38, PB-44 |
以下规则的输出消息已更新,因此与这些规则有关的 DTP 抑制可能不再可用:
- BD-PB-ARRAY
- BD-PB-CHECKRET
- BD-PB-OVERFARRAY
- BD-PB-PTRARR
- BD-PB-ZERO
- BD-TRS-MLOCK
- NAMING-HN-*
您可以通过配置恢复先前的消息和对 BD 类别规则的抑制。 请参阅 为什么在 C/C++ test 升级到较新版本后,DTP 上不再提供对某些规则的抑制?。