此版本包括以下增强功能:
发布日期:2021 年 11 月 15 日
与 Azure DevOps 和 GitLab 集成
我们添加了增强功能,以帮助您使用持续集成系统简化工作流程。您现在可以直接在 Azure Pipelines 或 GitLab 中方便地查看 C/C++test 报告的结果。
与 Azure DevOps 集成
我们为 Azure DevOps 添加了 C/C++test 扩展,它允许你轻松地将 C/C++test 与 Azure DevOps 通信通道集成。该扩展提供了使用 C/C++test 运行分析并生成 Azure DevOps 指定 SARIF 格式的 C/C++test 报告的任务。然后,分析结果会显示在每次执行通信通道的构建结果中。有关详细信息,请参见https://marketplace.visualstudio.com/items?itemName=parasoft.cpptest-azure-devops。
与 GitLab 集成
您现在可以通过修改您的 GitLab 工作流程来与 GitLab 集成,以使用 C/C++test 运行分析并生成 SAST 格式的分析报告。这允许您查看由 C/C++test 报告为 GitLab 中的代码漏洞的结果。有关详细信息,请参见https://gitlab.com/parasoft/cpptest-gitlab。
简化的代码覆盖率工作流程
我们添加了新选项来帮助您解决在使用 C/C++test 收集覆盖率信息时出现的问题。现在你可以:
- 显示覆盖率工作空间的诊断数据,包括错误和警告信息。
- 收集覆盖率工作空间的诊断数据,将其发送给 Parasoft 技术支持。
- 映射文件路径,以便能够收集位置在插桩和报告生成之间发生变化的文件的覆盖率信息。
- 自动从插桩或编译问题中恢复。
- 为在构建期间多次编译的文件收集覆盖率数据的多个变体。
有关详细信息,请参阅排除代码覆盖率故障 。
支持编译器
我们添加了对以下编译器的支持:
编译器名称 | 编译器首字母缩写词 |
---|---|
ARM 编译器 6.16 | armclang_6_16 |
Clang C/C++ Compiler v 12.0 (x86_64) | clang_12_0 |
GNU GCC 11.x (x86_64) | gcc_11-64 |
适用于 ARM v. 9.10x 的 IAR 编译器 | iccarm_9_10 |
我们更改了以下编译器的支持级别:
- 现在完全支持 TI ARM C/C++ Compiler v20.2。
- FR Family Softune C/C++ Compiler V6 – 支持级别从扩展变为 标准。
- RX C/C++ Compiler 2.5x – 支持级别从 扩展变为标准。
有关详细信息,请参见编译器。
支持 IDE
我们添加了对 Eclipse 版本 2020-06 (4.16) - 2021-06 (4.20) 的支持。
新建的和更新的代码分析规则
我们添加了新的静态分析规则,以扩展合规性标准的覆盖率。有关新规则和更新规则的列表,请参见New Rules和Updated Rules。
新建和更新测试配置
我们添加了以下测试配置:
- OWASP Top 10 20211
1这是测试配置的预览版。
接受 Parasoft 最终用户许可协议
您需要先接受 Parasoft 最终用户许可协议 (EULA) 才能使用 C/C++test 。Parasoft EULA (最终用户许可协议)可在 C/C++test 安装目录和 https://www.parasoft.com/license中找到。在 C/C++test 安装期间或首次启动时,系统将提示您同意 EULA (最终用户许可协议)的条款。
如果您使用 C/C++test 的命令行界面,您可以通过将以下设置添加到本地设置文件parasoft.eula.accepted=true.
来接受 EULA(最终用户许可协议):
其他变更
- 需求视图现在支持 Jama Connect(需要 DTP 2021.2 或更高版本)。请参见使用需求视图。
- .Parasoft C/C++test 项目配置文件已经过优化,仅包含最近自定义的 C/C++test 设置。
已弃用和删除的环境支持
删除了对 IDE 的支持
现在删除了对以下 IDE 的支持:
- Eclipse 4.3
已解决的 Bugs 和 FRs
Bug/FR 编号 | 说明 |
---|---|
CPP-42644 | 改进 AUTOSAR A13-5-5 的映射 |
CPP-47158 | 对于构造函数初始化列表中构造函数的显式调用,属性 'IsCompilerGenerated’返回 true |
CPP-47452 | 如果使用属性模式,则不会重新构建枚举。 |
CPP-47816 | 错误:没有重载函数 "getEnumInfo” 的实例与参数列表匹配 |
CPP-47861 | 具有对齐的静态变量的内联函数的错误插桩 |
CPP-47890 | AUTOSAR-A10_3_2-a:最终说明符的误报 |
CPP-48213 | '*a' 和 'a[b]' 表达式的类型未被检测为 const/volatile |
CPP-48214 | 从常量生成字符串时崩溃 |
CPP-48221 | METRICS-36:在同一 TU 中声明和定义的函数中使用时,计算两次相同的调用 |
CPP-48252 | CODSTA-26 (AUTOSAR-A5_1_1-a):在 constexpr 变量的初始化程序中使用的常量报告的误报违规 |
CPP-48260 | 改进 CERT-C INT15 的映射 |
CPP-48263 | AUTOSAR-M0_1_4-a:静态 constexpr 变量的误报 |
CPP-48264 | MISRA2004-20_3:应仅报告具有受限输入域的函数的违规行为 |
CPP-48265 | GLOBAL-UNUSEDFUNC:当函数用作模板参数时误报 |
CPP-48304 | 在某些情况下,不会自动抑制调用 Renesas rx2.5 编译器的类函数宏的违规行为 |
CPP-48310 | 为 'float’类型值选择 'min’或 'min positive’时,测试用例向导生成的测试用例代码不正确 |
CPP-48319 | JSF-143:引用初始化的误报违规 |
CPP-48320 | 不允许使用数据成员初始值设定项 |
CPP-48342 | 带有数据源的测试用例,输出显示:测试问题:未找到数据源 |
CPP-48386 | 'parasoft 抑制' 记录的有缺陷'行' 属性可能会导致更多的违规被抑制 |
CPP-48390 | 为 NAMING-44/JSF-051 添加可定制的异常 |
CPP-48395 | CODSTA-81 (AUTOSAR-M3_3_2-a):显式专用化模板的误报 |
CPP-48396 | 标记 'IsExplicitStatic’ 在具有显式实例的模板函数上无法正常工作 |
CPP-48415 | 错误:数组太大(无法分配 >=2^32 个元素) |
CPP-48434 | PB-50:在调用 *scanf_s 函数时报告误报 |
CPP-48464 | CODSTA-48 (AUTOSAR-A2_5_2-a):错误地将 <:: 标记序列检测为有向图 |
CPP-48491 | 标识符“__builtin_arm_get_fpscr”未定义 |
CPP-48500 | “volatile void *”类型的参数与 "void *” 类型的参数不兼容 |
CPP-48544 | 创建 operator_test 存根时出现 STATUS_ACCESS_VIOLATION 错误 |
CPP-48555 | 向解析器添加对 C 模式下的枚举基础的支持(clang 扩展) |
CPP-48582 | 在具有枚举参数的函数中通过参数化测试用例创建自动生成的参数名称不一致 |
CPP-48588 | bcc32_6_9 代码上的 cwc 内部错误:“pm_class_type:不是指向成员类型的指针” |
CPP-48629 | PB-69:当匿名联合的成员由指定的初始化程序初始化时出现 python 错误 |
CPP-48639 | static_cast 运算符的覆盖率插桩不正确 |
CPP-48670 | 改进 CERT-CPP DCL53 的映射 |
CPP-48703 | 改进 CERT-CPP ERR56 的映射 |
CPP-48713 | 为 ccac 编译器添加对 -Hcppext= 和 -Hcext= 选项的支持 |
CPP-48714 | 支撑初始化器的错误重构 |
CPP-48976 | 属性'Type'和'TypeTraverseReference'不适用于'Friend'节点 |
CPP-48977 | VXTC 编译器中函数属性的解析错误 |
CPP-49003 | vxtc_6_3 的空结构的插桩错误 |
CPP-49029 | 覆盖率插桩报告编译错误:调用 always_inline 时内联失败 |
CPP-49037 | 修复对 ccac 编译器的 -Hcppext= 和 -Hcext= 选项的支持 |
CPP-49042 | 'using’ 节点的属性 'Fullname’ 不报告范围前缀 |
CPP-49048 | INIT-06:在模板类中使用初始值设定项定义 const 数据成员时误报 |
CPP-49145 | 改进 http 代理的配置 |
CPP-49162 | 添加允许检查使用声明中使用的实际命名空间的属性 |
CPP-49199 | cpptestcc 覆盖率插桩将 UTF-8 文字更改为常规字符串文字,从而改变行为 |
CPP-49212 | CODSTA-MCPP-11_b_cpp11 (AUTOSAR-A7_1_2-b) 和 CODSTA-MCPP-09 (AUTOSAR-A15_4_4-a):'main' 函数的误报 |
CPP-49657 | 具有 __far IAR 内存属性的数组会导致解析器崩溃 |
FA-8388 | CERT_C-POS39-a (BD-PB-BYTEORD) 在发送/接收数据时报告违规。 |
FA-8430 | BD-PB-OVERFNZT 漏报 |
FA-8477 | 当使用元素也被释放的变量重新赋值时 BD-RES-FREE 漏报。 |
FA-8541 | BD-PB-OVERFNZT 误报。 |
FA-8548 | strdupa 和 strverscmp 上的 BD-PB-OVERFNZT 漏报。 |
FA-8551 | BD-PB-VOVR 漏报 |
FA-8557 | BD-PB-VALPARAM 误报。 |
FA-8573 | BD-PB-UCMETH 误报。 |
FA-8597 | 当在具有不同别名(规则映射)的后续运行中使用相同规则时,增量分析将停止报告违规。 |
FA-8634 | BD-SECURITY-LOG 误报 |
FA-8650 | 尝试简化链式转换后的 CFG 不正确 |
PT-914 | C/C++test Pro VS 插件无法从 DTP 获取许可证 - HTTPS handshake_failure |
PT-927 | 请求许可证时不应用代理设置。 |
PT-992 | 技术支持存档中的纯文本凭据 |
新建规则
规则 ID | 标题 |
---|---|
AUTOSAR-A13_5_5-b | 比较运算符应为具有相同参数类型和 noexcept 的非成员函数 |
CERT_CPP-DCL53-c | 避免在语法上有歧义的函数声明 |
CERT_CPP-ERR56-b | 不要让 'catch’ 块为空 |
CODSTA-CPP-107 | 比较运算符应为非成员函数 |
CODSTA-CPP-107_b | 比较运算符应为具有相同参数类型和 noexcept 的非成员函数 |
FORMAT-48 | 函数声明中的参数名称不应括在括号中 |
FORMAT-49 | 变量声明中的局部变量名称不应包含在括号中 |
OWASP2021-A1-a | 防止文件名注入 |
OWASP2021-A1-b | 放弃特权时遵守正确的撤销顺序 |
OWASP2021-A1-c | 确保成功放弃特权 |
OWASP2021-A2-a | 正确的种子伪随机数生成器 |
OWASP2021-A3-a | 避免将未经验证的二进制数据传递到日志方法 |
OWASP2021-A3-b | 防止命令注入 |
OWASP2021-A3-c | 避免在输出控制台上打印污染的数据 |
OWASP2021-A3-d | 防止环境注入 |
OWASP2021-A3-e | 从格式字符串中排除未经过滤的用户输入 |
OWASP2021-A3-f | 防止 SQL 注入 |
OWASP2021-A4-a | 避免将敏感数据传递给写入日志文件的函数 |
OWASP2021-A5-a | 如果在单个 try-catch 语句或 function-try-block 中为派生类及其部分或全部基数提供了多个处理程序,则这些处理程序应按最源于基类的顺序排序 |
OWASP2021-A5-b | 不要让 'catch’ 块为空 |
OWASP2021-A5-c | 正确使用 errno 值 |
OWASP2021-A5-d | 在 libxerces-c 中禁用解析 XML 外部实体(XXE) |
OWASP2021-A7-a | 不要使用弱加密功能 |
OWASP2021-A8-a | 注意确保 LoadLibrary() 将加载正确的库 |
OWASP2021-A9-a | 所有异常都应重新抛出或使用标准记录器记录 |
PB-78 | 对程序员定义的整数类型使用 intmax_t 或 uintmax_t 进行格式化 IO |
PB-79 | 避免在语法上有歧义的函数声明 |
更新规则
类别 ID | 规则 IDs |
---|---|
AUTOSAR C++14 编码准则 | AUTOSAR-A0_1_1-a, AUTOSAR-A10_3_2-a, AUTOSAR-A12_1_1-b, AUTOSAR-A12_1_3-a, AUTOSAR-A13_5_5-a, AUTOSAR-A15_4_4-a, AUTOSAR-A20_8_2-a, AUTOSAR-A20_8_3-a, AUTOSAR-A20_8_4-a, AUTOSAR-A27_0_2-a, AUTOSAR-A2_5_2-a, AUTOSAR-A3_8_1-a, AUTOSAR-A5_1_1-a, AUTOSAR-A5_3_2-a, AUTOSAR-A7_1_2-b, AUTOSAR-M0_1_10-a, AUTOSAR-M0_1_4-a, AUTOSAR-M0_3_1-f, AUTOSAR-M0_3_1-g, AUTOSAR-M3_3_2-a |
流分析 | BD-PB-BYTEORD, BD-PB-NP, BD-PB-OVERFNZT, BD-PB-UCMETH, BD-PB-VALPARAM, BD-PB-VOVR, BD-RES-FREE, BD-SECURITY-LOG |
SEI CERT C | CERT_C-ARR38-d, CERT_C-CON31-b, CERT_C-DCL10-a, CERT_C-DCL11-a, CERT_C-DCL11-b, CERT_C-DCL11-c, CERT_C-DCL11-d, CERT_C-DCL11-e, CERT_C-DCL11-f, CERT_C-DCL22-a, CERT_C-ERR33-c, CERT_C-EXP34-a, CERT_C-FIO46-a, CERT_C-FIO47-a, CERT_C-FIO47-b, CERT_C-FIO47-c, CERT_C-FIO47-d, CERT_C-FIO47-e, CERT_C-FIO47-f, CERT_C-INT15-a, CERT_C-MEM00-d, CERT_C-MEM01-a, CERT_C-MEM04-a, CERT_C-MEM07-a, CERT_C-MEM30-a, CERT_C-MSC19-b, CERT_C-POS30-a, CERT_C-POS39-a, CERT_C-POS54-c, CERT_C-STR03-a, CERT_C-STR32-a |
SEI CERT C++ | CERT_CPP-DCL53-a, CERT_CPP-DCL53-b, CERT_CPP-ERR56-a, CERT_CPP-EXP54-a, CERT_CPP-MEM50-a, CERT_CPP-STR50-b, CERT_CPP-STR51-a |
编码规范 | CODSTA-26, CODSTA-48, CODSTA-81 |
Modern C++ 的编码规范 | CODSTA-MCPP-05, CODSTA-MCPP-09, CODSTA-MCPP-11_b_cpp11, CODSTA-MCPP-29, CODSTA-MCPP-30 |
常见不足枚举 | CWE-20-c, CWE-415-a, CWE-416-a, CWE-476-a |
全局静态分析 | GLOBAL-ONEUSEVAR, GLOBAL-UNUSEDFUNC |
高完整性 C++ | HICPP-10_2_1-a, HICPP-12_4_2-a, HICPP-1_2_1-h, HICPP-2_2_1-a, HICPP-5_1_1-a, HICPP-5_2_1-c, HICPP-8_4_1-b |
初始化 | INIT-06, INIT-17 |
Joint Strike Fighter | JSF-012, JSF-051, JSF-071_b, JSF-138_b, JSF-143, JSF-151 |
度量指标 | METRICS-36 |
MISRA C 2004 | MISRA2004-20_3, MISRA2004-8_11 |
MISRA C++ 2008 | MISRA2008-0_1_10_b, MISRA2008-0_1_4, MISRA2008-0_1_6, MISRA2008-0_3_1_b, MISRA2008-0_3_1_e, MISRA2008-2_5_1, MISRA2008-3_3_2 |
MISRA C 2012 (Legacy) | MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_1_b, MISRA2012-DIR-4_1_e, MISRA2012-RULE-1_3_c, MISRA2012-RULE-21_17_a, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_6, MISRA2012-RULE-2_2_b, MISRA2012-RULE-8_8, MISRA2012-RULE-9_4 |
MISRA C 2012 | MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_1-e, MISRAC2012-DIR_4_13-b, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_2_2-b, MISRAC2012-RULE_8_8-a , MISRAC2012-RULE_9_4-a |
命名规范 | NAMING-44 |
优化 | OPT-26 |
OWASP 十大最关键的 Web 应用程序安全风险(2017) | OWASP2017-A1-a, OWASP2019-API3-e |
可能的错误 | PB-45, PB-46, PB-47, PB-48, PB-49, PB-50, PB-62, PB-69 |