在此版本中,我们专注于扩展对环境的支持并增强 C/C++ test 的安全测试功能。

支持环境

新编译器

我们添加了对以下编译器的支持:

编译器名称编译器首字母缩写词
GNU GCC 8.xgcc_8
GNU GCC 8.x (x86_64)gcc_8-64
IAR Compiler for RL78 v. 3.10.xiccrl78_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-51csgccarm_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++ 编码标准规则。

(info) 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-6649BD-PB-CC 位 AND 上的误警率
FA-6611转换资源时 BD-RES-LEAKS 的误警率
FA-6453模拟错误地假定对 "&(ptr->field)” 操作进行取消指针引用操作。
FA-5769BD-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-aWrap 功能可以在循环中虚假唤醒
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 上不再提供对某些规则的抑制?

  • No labels