此版本包括以下增强功能:
发布日期:2021 年 11 月 15 日
Azure DevOps 和 GitLab 集成
我们添加了可帮助您简化 CI 系统工作流程的增强功能。现在,您可以直接在 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 格式生成分析报告。这允许您在 GitLab 中查看 C/C++test 报告的代码漏洞结果。详细信息请参阅 https://gitlab.com/parasoft/cpptest-gitlab。
简化代码覆盖率工作流程
我们添加了新的选项来帮助您解决使用 C/C++test 收集覆盖率信息时出现的问题。现在,您可以:
- 查看覆盖率工作空间的诊断数据,包括错误和警告信息。
- 收集覆盖率工作空间的诊断数据,并将其发送给 Parasoft 技术支持。
- 映射文件路径,以便能够收集在插桩和报告生成期间位置发生变化的文件的覆盖率信息。
- 从插桩或编译问题中自动恢复。
- 收集在构建过程中多次编译文件的覆盖率数据的多个变体。
详细信息请参阅代码覆盖率故障排查。
新增和更新的代码分析规则
我们新增了静态分析规则来扩展编码标准的覆盖率。有关新增规则和更新规则的列表,请参阅新增规则和更新规则。
新增和更新的测试配置
我们添加了以下测试配置:
- 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 的命令行界面,则可以通过在 localsettings 文件中添加以下设置来接受 EULA:parasoft.eula.accepted=true。
如果以静默(非交互式)模式安装 Parasoft C/C++test for Visual Studio,则必须通过以下命令运行安装向导来接受 EULA:/acceptEula=yes。
弃用和删除的环境支持
下个版本将删除已弃用的 Visual Studio 2012 和 2013 支持。
解决的 Bug 和 FR
Bug/FR ID | 说明 |
---|---|
CPP-42644 | 改进 AUTOSAR A13-5-5 的映射 |
CPP-47158 | 对构造函数初始化列表中构造函数的显式调用,属性 'IsCompilerGenerated' 返回 true |
CPP-47452 | 如果使用属性模式,枚举不会被重建。 |
CPP-47816 | 错误:重载函数 "getEnumInfo" 的实例与参数列表不匹配 |
CPP-47861 | 包含对齐的静态变量的内联函数插桩不正确 |
CPP-47890 | AUTOSAR-A10_3_2-a:final 修饰符误报 |
CPP-48213 | 表达式 '*a' and '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 suppress' 记录的 'line' 属性格式错误可能会导致更多违规被抑制 |
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):将 <:: token 序列错误地检测为合成符 |
CPP-48491 | 标识符 "__builtin_arm_get_fpscr" 未定义 |
CPP-48500 | "volatile void *" 类型的参数与 "void *" 类型的参数不兼容 |
CPP-48544 | 创建 operator_test 桩函数时发生 STATUS_ACCESS_VIOLATION 错误 |
CPP-48555 | 在解析器(clang 扩展)中添加对 C 模式下枚举基类的支持 |
CPP-48582 | 带枚举参数的函数中参数化的测试用例创建自动生成的参数名不一致 |
CPP-48588 | bcc32_6_9 代码上的 cwc 内部错误: "pm_class_type: not a pointer to member 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 | 添加允许检查 Using 声明中使用的实际命名空间的属性 |
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 | 当 usage 元素也是已释放变量的重新赋值时,BD-RES-FREE 漏报。 |
FA-8541 | BD-PB-OVERFNZT 误报。 |
FA-8548 | BD-PB-OVERFNZT 漏报 strdupa 和 strverscmp。 |
FA-8551 | BD-PB-NP 漏报。 |
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 | 对程序员定义的整数类型的格式化 IO 使用 intmax_t 或 uintmax_t |
PB-79 | 避免语法不明确的函数声明 |
更新规则
类别 ID | 规则 ID |
---|---|
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 |
High Integrity 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 |
联合攻击战斗机 | 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(遗留) | 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 10 项最严重的 Web 应用程序安全风险 (2017) | OWASP2017-A1-a, OWASP2019-API3-e |
潜在的缺陷 | PB-45, PB-46, PB-47, PB-48, PB-49, PB-50, PB-62, PB-69 |