在此版本中,我们专注于增强功能安全性和合规性解决方案。我们扩展了 AUTOSAR C++ 14 标准的覆盖率,以帮助您完全遵守 AUTOSAR 的请求 和 自动 规则,并增加了对最新版本 CWE 准则的支持。
支持环境
新的 IDEs
我们增加了对以下方面的支持:
- QNX 软件开发平台 7.0
新编译器
编译器名称 | 编译器首字母缩写词 |
---|---|
GNU GCC 9.x | gcc_9 |
GNU GCC 9.x (x86_64) | gcc_9-64 |
适用于 ARM v.8.22x 的 IAR 编译器 | iccarm_8_22 |
适用于 ARM 8.40x 的 IAR 编译器 | iccarm_8_40 |
Microsoft Visual C++ 14.2 | vc_14_2 |
Microsoft Visual C++ 14.2 (x86_64) | vc_14_2-64 |
Clang C/C++ Compiler v 8.0 (x86_64) | clang_8_0 |
现在扩展了对 QNX GCC 5.x(ARM)的支持,并批准将其用于对安全至关重要的软件开发。
现在基于 GCC 和 ARM 的编译器支持 ARM NEON 扩展。
弃用的编译器
不支持以下编译器,并且在将来的版本中将不再支持:
ARM RealView 4.1
适用于 uVision 的 ARM RealView 4.1
CodeSourcery Sourcery G++ Lite 2009q1-203
GNU GCC 4.0.x
GNU GCC 4.0.x (x86_64)
GNU GCC 4.1.x
GNU GCC 4.1.x (x86_64)
GNU GCC 4.2.x
GNU GCC 4.2.x (x86_64)
GNU GCC 4.3.x
GNU GCC 4.3.x (x86_64)
GNU GCC 4.4.x
GNU GCC 4.4.x (x86_64)
适用于 ARM 6.1x 的 IAR 编译器
适用于 ARM 6.3x 的 IAR 编译器
适用于 MSP430 v.5.4x 的 IAR 编译器
- Microsoft Visual C++ 9.0
- Microsoft Visual C++ 10.0
TI TMS320C2000 C/C++ 编译器 v6.2
TI TMS320C6x C/C++ 编译器 v7.3
TI MSP430 C/C++ 编译器 v4.0
用于 TriCore C/C++ 编译器 4.0 的 Vx-toolset
Wind River GCC 3.4.x
Windows 不再支持 Intel C++ Compiler v 18.0。
扩展的 Automotive Compliance Pack
我们扩展了对 AUTOSAR C++ 14 的支持,以帮助您实现对标准的遵守。现在已完全涵盖“必需”和“自动化”类别中的所有AUTOSAR规则,以支持您在 汽车系统体系开发 结构中的测试工作。
扩展的安全 Compliance Pack
我们增加了对新更新的2019年通用弱点枚举(CWE)的支持。C/C++ test 现在附带新的测试配置,可帮助您强制遵守 Cusp 准则中的 CWE Top 25 2019 和 CWE 弱点; 请参阅下面的 新的和更新的测试配置 部分。
新建的和更新的代码分析规则
我们添加了新的静态分析规则,以扩展合规性标准的覆盖范围,特别关注 AUTOSAR 标准 C++ 14;有关新规则和更新规则的列表,请参见 新规则和更新规则 。
此外,我们添加了 NOMCIM 指标来计算函数中的函数调用次数。
新的和更新的测试配置
我们添加了以下测试配置:
- CWE Top 25 2019
- CWE Top 25 + On the Cusp 2019
- OWASP Top 10 2017
- UL 2900
弃用的测试配置
- CWE-SANS Top 25 Most Dangerous Programming Errors – 不推荐使用,并已由 CWE Top 25 2019 测试配置取代
- OWASP Top 10 2017 – 不推荐使用,并已由 OWASP Top 10 2017 测试配置取代
- UL 2900 –不推荐使用,并已由 UL 2900 测试配置其中包括 CWE SANS Top 25 + 在 Cusp 2019 和 OWASP Top 10 2017 规则取代
默认情况下,不推荐使用的测试配置 不可用,并且只能用作用户定义的测试配置。现在,它们在以下位置随 C/C++ test 一起提供:[INSTALL_DIR]\configs\Deprecated.
创建调用原始函数的存根
如果未在测试用例中注册特定于测试用例的存根回调函数,则存根回调机制已得到增强,可以调用原始函数。 请参见 创建调用原始函数的存根。
独立许可证服务器
现在您可以从 DTP 的其他实例或独立的许可证服务器获取 Parasoft 许可证。请参见许可证。
OpenID Connect 支持
现在您可以通过 OpenID Connect 在 DTP 上进行身份验证,从而为与 DTP 服务器的交互增加一层安全性。有关详细信息,请参见 在 UI 中配置 OpenID Connect 和 配置 OpenID Connect.properties 文件 。
其他变更
- 现在默认支持
@test
问题跟踪标记,用于将测试与开发工件相关联。请参见指示代码和测试的关联。 - 增量分析模式下的流量分析性能得到了提高。我们减少了后续运行的分析时间。
- 不再支持连接到 Project Center。DTP/Concerto 随附的 Project Center 模块已达到使用寿命(EOL)阶段,并且已在DTP 5.4.2。
- 不再支持早于版本 7 的 QNX Momentics IDE。
已解决的 Bugs 和 FRs
Bug/FR ID | 说明 |
---|---|
CPP-39554 | 规则 CODSTA-13 应该更新为遵循 MISRA2004-17_3 |
CPP-39913 | VS 无法在 Visual Studio 中启用过滤的规则。 |
CPP-42073 | 添加对 ARM NEON 扩展的支持 |
CPP-42495 | 当函数定义不可用(可见)时,规则 COMMENT-04 不应报告函数声明 |
CPP-42527 | 改进 AUTOSAR-M2_13_2-a 的映射(C++ 14 语义) |
CPP-42858 | 改进 CERT-INT31 的映射 |
CPP-43140 | 改进 MISRA2012-RULE-2_2 的映射 |
CPP-43141 | 规则 CODSTA-163_b(MISRAC2012-RULE_10_3-b)报告三元运算符的误警率 |
CPP-43142 | 规则 CODSTA-CPP-59 报告 __cplusplus 宏排除的 #include 指令的误警率 |
CPP-43143 | 规则 MISRA2004-9_2_c(AUTOSAR-M8_5_2-c)在 std::array 和 constexpr 上错误报告 |
CPP-43150 | 当静态常量变量用作模板参数时,规则 GLOBAL-ONEUSEVAR(MISRA2008-0_1_4)报告误警率 |
CPP-43413 | 规则 OPT-02(OPT-03,OPT-31)报告 lambdas 捕获的参数/变量的误警率 |
CPP-43414 | 解析报告的模板中用户定义后缀的失败信息(C++ 14) |
CPP-43465 | LSI 无法读取 ARM OE 工具链的对象/库数据 |
CPP-43479 | 检测代码时报告错误(进程退出代码:137) |
CPP-43523 | 运行单元测试时报告错误:无效的文件格式:无法读取导出 |
CPP-43549 | 自定义源/头文件扩展名未从 IDE 传播到 Static Analysis 引擎 |
CPP-43558 | 调试测试用例时未禁用超时 |
CPP-43567 | 报告来自 libstdc++ 的 __once_call 和 __once_callable 符号没有被 LSI 找到 |
CPP-43568 | 如果在计算机上同时安装了 VS2017 和 VS 2019,则无法安装 C /C++ test |
CPP-43602 | 为 GHS/ARM 编译器配置 gnu99 选项 |
CPP-43603 | 规则 FORMAT-43 在 #ifdef/difndef 配对时报告误警率 |
CPP-43643 | IAR-RL78 编译器配置中缺少对 "--core”选项的支持 |
CPP-43667 | 当常量变量用作模板参数时,规则 OPT-05 报告误警率 |
CPP-43675 | 当在 printf/scanf 函数调用中将纯字符作为 '%c’指定符传递时,规则 PB-45 报告误警率 |
CPP-43688 | 规则 PB-45、PB-46、 PB-47、 PB-48、 PB-49 对 'scanf’ 函数的参数不起作用 |
CPP-43689 | 当在 'scanf’函数中使用字符说明符时,规则 PB-50 报告为误警率 |
CPP-43706 | 改进规则 MISRA2004-20_5(JSF-017):不要在违规消息中打印行号 |
CPP-43744 | 改进可过滤重复违规的算法。 |
CPP-43748 | 当从函数返回解引用的迭代器的地址时,规则 MISRA2004-17_6_a 报告误警率 |
CPP-43831 | 使用 Microsoft Windows Kit SDK 10.0.18362.0 的安全存根上的编译错误 |
CPP-43837 | 使用与Renesas RX C++ 2.5.X 编译器的 -endian=big 时解析失败报告 |
CPP-43869 | 规则 INIT-05 报告对右值引用的误警率 |
CPP-43889 | 报告解析失败:对非常量的引用的初始值必须为左值 |
CPP-43892 | 报告解析失败:引用了参数包 "Indexes”,但没有展开 |
CPP-43893 | 改进 CERT EXP45-C 的映射(删除 CERT_C-EXP45-a 和 CERT_C-EXP45-c) |
CPP-43896 | 改进 Renesas Rx 的单元测试执行 |
CPP-43971 | 为 GCC 和 Clang 编译器启用 edg.implicit_noexcept_enabled 配置选项 |
CPP-43972 | C/C++ test 无法从数据源读取 "$NULL”值 |
CPP-43975 | 当通过注释之前有预处理器指令,则规则 CODSTA-149 (CERT_C-MSC17-a) 报告误警率。 |
CPP-43992 | TempLic*txt 文件创建且未在 temp 文件夹中清除 |
CPP-44001 | 为 CMFCSampleDlg::OnPaint() 创建测试用例时,VS IDE 没有响应 |
CPP-44025 | 规则 CERT_C-INT36-a 在将 '0’强制转换为 void* 类型时报告误警率 |
CPP-44045 | 规则 OPT-06 报告 lambda 捕获的局部变量的误警率 |
CPP-44046 | STATUS_ACCESS_VIOLATION: 线程尝试读取或写入它没有访问权限的虚拟地址。 |
CPP-44055 | VS C/C++ test 仅处理第一个 -localsettings 参数(忽略其他参数) |
CPP-44059 | 报告 HTML - 测试用例中的测试功能具有空白字段 |
CPP-44088 | 静态分析(cwc)在文字变量模板的代码 3 中退出 |
CPP-44225 | 在移位表达式中使用操作数的双精度转换时,规则 MISRA2004-12_8(MISRAC2012-RULE_12_2-a)报告误警率 |
CPP-44271 | 报告解析失败:表达式必须具有常数 static constexpr bool 值= has_named_enum_tag <T>(0); |
CPP-44273 | 重命名测试用例实际上会重命名该测试的类名 |
CPP-44274 | 规则 HICPP-17_2_1-a (AUTOSAR-A17_1_1-b) 报告 #include <string> 上的误警率 |
CPP-44538 | 添加对缺少的 IAR 原子内建函数的支持 |
CPP-44576 | C++test 10.4.3 BETA - 命令行分析未获得许可 |
FA-4617 | BD-PB-DEREF在检查数组变量是否为空时报告误警率 |
FA-4651 | BD-RES-FREE 误警率表示释放已经作为另一种类型的资源释放的内存(例如 pthread 互斥锁) |
FA-4998 | 在关闭的文件描述符上执行的算术操作上,BD-RES-Free 的 Bogus 违规。 |
FA-7097 | BD-PB-PTRARR 类型不匹配的误警率 |
FA-7105 | BD-PB-OVERFWR 误警率 |
FA-7191 | 使用常量表达式时,BD-RES-INVFREE 误警率 |
FA-7195 | BD-CO-ITOUT - container cend() 方法的误警率 |
FA-7266 | 错误的流量分析结果:FA 不考虑常量全局数组的元素值。 |
FA-7291 | 关闭数组元素引用的资源时,BD-RES-INVFREE 的误警率。 |
FA-7398 | Flow Analysis Aggressive 报告了C++ test 10.4.2 中的静态分析问题 |
FA-7410 | 使用 typedef 时 BD-SECURITY-OVERFFMT 的误警率 |
FA-7413 | MISRA2012-RULE-19-1_c(BD-PB-OVERLAP)的误警率 |
FA-7441 | 在字符串格式中指定 %*s 时,CERT_C-ARR38-c (BD-PB-OVERFFMT) 报告 FP 违规 |
XT-36609 | 密码中的 £ 字符可防止 Parasoft 工具连接到 DTP |
XT-36611 | 使用 'min’选项发布 Sim-link 源代码失败 |
XT-36843 | 尝试获取许可证时,使用 cpptestcli 的并发构建不等待超时 |
XT-36950 | 从 XML Graphics Project 更新易受攻击的库 |
XT-37358 | 100% 成功通过测试时,报告中不会显示 100% |
新建规则
规则 ID | 标题 |
---|---|
AUTOSAR-A0_1_5-a | 虚函数中不得有未使用的命名参数 |
AUTOSAR-A12_1_3-a | 在所有构造函数中使用相同常量值初始化数据成员的用户定义的构造函数,应改用 NSDMI 进行初始化 |
AUTOSAR-A12_1_6-a | 不需要进一步显式初始化并且需要基类中的所有构造函数的派生类都应使用继承的构造函数 |
AUTOSAR-A15_3_4-a | 避免使用 catch-all 的异常处理程序 |
AUTOSAR-A15_4_5-a | 应该在函数声明之前直接在注释中指定可能从函数引发的检查异常 |
AUTOSAR-A15_5_2-c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'quick_exit()’和 '_Exit()’函数 |
AUTOSAR-A1_1_1-a | 不得使用 'register’存储类说明符 |
AUTOSAR-A1_1_1-b | 声明复制构造函数时,应声明复制赋值运算符(反之亦然) |
AUTOSAR-A1_1_1-c | 对于具有非平凡析构函数的类,应声明复制构造函数和复制赋值运算符 |
AUTOSAR-A1_1_1-d | 不得使用 C 库 |
AUTOSAR-A1_1_1-e | 在 lambdas 上优先于 std::bind、std::bind1st 和 std::bind2nd |
AUTOSAR-A1_1_1-f | 不应使用 'binder1st’和 'binder2nd’标识符 |
AUTOSAR-A1_1_1-g | 最好使用 std::unique_ptr 代替 std::auto_ptr |
AUTOSAR-A1_1_1-h | 不应使用 'random_shuffle’标识符 |
AUTOSAR-A1_1_1-i | 不要在 'bool’类型的操作数上使用增量运算符(++) |
AUTOSAR-A1_1_1-j | 不应使用 'set_unexpected’标识符 |
AUTOSAR-A1_1_1-k | 不要使用抛出异常规范 |
AUTOSAR-A27_0_4-a | 不要使用会写入未检查范围的缓冲区的不安全 C 函数 |
AUTOSAR-A27_0_4-b | 避免使用不检查边界的不安全的字符串函数 |
AUTOSAR-A27_0_4-c | 不要使用 'char’缓冲区存储 'std::cin’的输入 |
AUTOSAR-A27_0_4-d | 不得使用 C-style 字符串 |
AUTOSAR-A2_10_4-a | 具有静态存储持续时间的非成员对象的标识符名称不得在命名空间内重用 |
AUTOSAR-A2_10_4-b | 非成员静态函数的标识符名称不得在命名空间内重用 |
AUTOSAR-A2_7_3-a | 在类型、数据成员和函数的所有声明之前,均应加上带有'@brief'标记的注释 |
AUTOSAR-A2_7_3-b | 函数参数和返回类型应在函数声明之前的注释中记录 |
AUTOSAR-A3_3_2-a | 静态和线程局部对象应进行常量初始化 |
AUTOSAR-A5_1_6-a | 必须明确指定非无效返回类型 lambda 表达式的返回类型 |
AUTOSAR-A5_1_8-a | Lambda 表达式不应在另一个 Lambda 表达式中定义 |
AUTOSAR-A5_3_1-a | 'typeid’ 运算符的操作数不得包含任何具有副作用的表达式 |
AUTOSAR-A5_3_1-b | 'typeid’运算符的操作数不得包含会引起副作用的函数调用 |
AUTOSAR-A6_2_1-a | 复制分配运算符不应有可能会影响复制对象的副作用 |
AUTOSAR-A6_2_1-b | 移位分配运算符不应具有可能会影响对象移位的副作用 |
AUTOSAR-A6_2_2-a | 表达式语句不应仅是对临时对象的构造函数的显式调用 |
AUTOSAR-A7_1_5-a | 不要过度使用 'auto’说明符 |
AUTOSAR-A8_2_1-a | 如果返回类型前面带有'typename'关键字,请使用结尾的返回类型语法 |
AUTOSAR-A8_4_8-a | 不得使用输出参数 |
AUTOSAR-A8_5_2-a | 不带等号的大括号初始化{}必须用于变量初始化 |
AUTOSAR-A8_5_3-a | Auto类型的变量不得使用 '{}’或 '={}' 括号初始化 |
AUTOSAR-M15_3_7-a | 如果在单个 'try-catch' 语句或 'function-try-block’中提供了多个处理程序,则任何省略号(全部捕获)处理程序都应最后出现 |
AUTOSAR-M18_0_3-b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
AUTOSAR-M18_0_3-c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'system()'函数 |
AUTOSAR-M18_0_3-d | 不得使用 'stdlib.h’或 'cstdlib’库中的 'getenv()’函数 |
BD-RES-INSUFMEM | 分配足够的内存来保存给定类型的对象 |
BD-SECURITY-XXEXRC | 在 libxerces-c 中禁用解析 XML 外部实体(XXE) |
CERT_C-ERR04-b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
CERT_C-ERR04-c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'quick_exit()’和 '_Exit()’函数 |
CERT_C-ERR05-b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
CERT_C-ERR05-c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'quick_exit()’和 '_Exit()’函数 |
CERT_C-INT31-o | 避免整数溢出 |
CERT_CPP-ERR50-n | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'quick_exit()’和 '_Exit()’函数 |
CERT_CPP-EXP52-d | 'typeid’ 运算符的操作数不得包含任何具有副作用的表达式 |
CERT_CPP-EXP52-e | 'typeid’运算符的操作数不得包含会引起副作用的函数调用 |
CODSTA-204 | 声明为 'noreturn’的函数应具有 'void' 返回类型 |
CODSTA-CPP-103 | 不得使用输出参数 |
CODSTA-CPP-104_b | 'typeid’运算符的操作数不得包含会引起副作用的函数调用 |
CODSTA-CPP-104 | 'typeid’ 运算符的操作数不得包含任何具有副作用的表达式 |
CODSTA-MCPP-07_b | 不应使用 'binder1st’和 'binder2nd’标识符 |
CODSTA-MCPP-13_b | 'std::forward’函数应用于转发综合引用 |
CODSTA-MCPP-32 | 静态和线程局部对象应进行常量初始化 |
CODSTA-MCPP-37 | 不需要进一步显式初始化并且需要基类中的所有构造函数的派生类都应使用继承的构造函数 |
CODSTA-MCPP-38 | 不带等号的大括号初始化{}必须用于变量初始化 |
CODSTA-MCPP-39 | Auto类型的变量不得使用 '{}’或 '={}' 括号初始化 |
CODSTA-MCPP-40 | 不要过度使用 'auto’说明符 |
CODSTA-MCPP-41 | 不应使用 'random_shuffle’标识符 |
CODSTA-MCPP-42 | 不要在 'bool’类型的操作数上使用增量运算符(++) |
CODSTA-MCPP-43 | 不应使用 'set_unexpected’标识符 |
CODSTA-MCPP-44 | Lambda 表达式不应在另一个 Lambda 表达式中定义 |
CODSTA-MCPP-45 | 必须明确指定非无效返回类型 lambda 表达式的返回类型 |
CODSTA-MCPP-46 | 在每个 lambda 表达式中包括一个参数列表 |
COMMENT-04_b | 在函数声明之前的注释中记录函数 |
COMMENT-14_b | 函数参数和返回类型应在函数声明之前的注释中记录 |
COMMENT-14 | 在类型、数据成员和函数的所有声明之前,均应加上带有'@brief'标记的注释 |
CWE-119-a | 避免超出范围访问数组 |
CWE-119-b | 避免超出范围访问数组和指针 |
CWE-119-c | 避免由于定义不正确的格式限制而导致缓冲区溢出 |
CWE-119-d | 从缓冲区读取时避免溢出 |
CWE-119-e | 写入缓冲区时避免溢出 |
CWE-119-f | 避免在数组索引中污染数据 |
CWE-119-g | 防止缓冲区溢出污染数据 |
CWE-119-h | 避免从受污染的数据中读取缓冲区溢出 |
CWE-119-i | 避免缓冲区从受污染的数据中溢出 |
CWE-119-j | 在没有检查源缓冲区大小的情况下可疑地使用了 'strcpy' |
CWE-125-a | 避免超出范围访问数组 |
CWE-125-b | 避免超出范围访问数组和指针 |
CWE-125-c | 从缓冲区读取时避免溢出 |
CWE-125-d | 避免从受污染的数据中读取缓冲区溢出 |
CWE-190-a | 避免整数溢出 |
CWE-190-b | 避免将结果强制转换为更广泛的整数类型的表达式中可能出现的整数溢出 |
CWE-190-c | 避免在将结果分配给更广泛的整数类型的变量的表达式中可能出现整数溢出 |
CWE-190-d | 避免将结果与更广泛的整数类型的表达式进行比较的表达式中可能出现的整数溢出 |
CWE-190-e | '+'、'-'、'*’运算符中常量表达式的整数上溢或下溢 |
CWE-190-f | '<<' 运算符中常量表达式的整数上溢或下溢 |
CWE-190-g | 常量无符号整数表达式的求值不应导致环绕 |
CWE-20-a | 避免在数组索引中污染数据 |
CWE-20-b | 防止整数溢出/溢出的污染数据 |
CWE-20-c | 避免将未经验证的二进制数据传递到日志方法 |
CWE-20-d | 防止命令注入 |
CWE-20-e | 避免在输出控制台上打印污染的数据 |
CWE-20-f | 防止环境注入 |
CWE-20-g | 从格式字符串中排除未经过滤的用户输入 |
CWE-20-h | 防止 SQL 注入 |
CWE-20-i | 防止文件名注入 |
CWE-20-j | 不受信任的数据用作循环边界 |
CWE-200-a | 不要将由于应用程序错误而导致的潜在敏感信息打印到异常消息中 |
CWE-22-a | 防止文件名注入 |
CWE-269-a | 放弃特权时遵守正确的撤销顺序 |
CWE-269-b | 确保成功放弃特权 |
CWE-287-a | 不要使用弱加密功能 |
CWE-326-a | 不要使用弱加密功能 |
CWE-362-a | 禁止使用容易引起竞争的功能 |
CWE-362-b | 访问文件时避免竞争条件 |
CWE-362-c | 修改位字段时使用锁来防止竞争情况 |
CWE-362-d | 使用 fork 和 file 描述符时避免竞争条件 |
CWE-362-e | 不要使用具有不同锁集的全局变量 |
CWE-400-a | 不要在堆栈上创建超出定义限制的变量 |
CWE-415-a | 不要使用已释放的资源 |
CWE-416-a | 不要使用已释放的资源 |
CWE-416-b | 不要指向已释放的包装对象 |
CWE-416-c | 在任何情况下都不应访问已释放的内存 |
CWE-426-a | 注意确保 LoadLibrary() 将加载正确的库 |
CWE-476-a | 避免空指针解引用 |
CWE-476-b | 取消引用后不要检查 null |
CWE-611-a | 在 libxerces-c 中禁用解析 XML 外部实体(XXE) |
CWE-617-a | 不要使用断言 |
CWE-704-a | 不得在指向函数的指针与指向函数的指针以外的任何其他类型之间进行转换 |
CWE-704-b | 不能在指向函数类型的不兼容指针之间进行转换 |
CWE-704-c | 不能在指向不完整类型的指针和任何其他类型的指针之间进行转换 |
CWE-704-d | 指向对象类型的指针和指向不同对象类型的指针之间不得执行强制转换 |
CWE-704-e | 在对象类型的指针与 'uintptr_t’或 'intptr_t’以外的整数类型之间不应执行转换 |
CWE-704-f | 不应将指针从 void 转换为对象 |
CWE-704-g | 不能在指向 void 的指针和算术类型之间执行强制转换 |
CWE-704-h | 指向 void 的指针和算术类型之间不得执行隐式转换 |
CWE-704-i | 不得在指向对象的指针和非整数算术类型之间执行强制转换 |
CWE-704-j | 不得使用从较广泛的整数类型到较窄的整数类型的隐式转换,这可能会导致信息丢失 |
CWE-704-k | 从整数到浮点类型的隐式转换可能会导致信息丢失,请勿使用 |
CWE-704-l | 从整数常量到浮点型的隐式转换可能会导致信息丢失,请勿使用 |
CWE-732-a | 在调用 'mkstemp’之前先调用 'umask’ |
CWE-732-b | 如果使用 'open’或 'openat’系统调用创建文件,请指定访问权限位 |
CWE-770-a | 确保释放资源 |
CWE-772-a | 确保释放资源 |
CWE-772-b | 在用作具有虚拟功能的基类的类中定义虚拟析构函数 |
CWE-78-a | 防止命令注入 |
CWE-787-a | 避免超出范围访问数组 |
CWE-787-b | 避免超出范围访问数组和指针 |
CWE-787-c | 避免由于定义不正确的格式限制而导致缓冲区溢出 |
CWE-787-d | 写入缓冲区时避免溢出 |
CWE-787-e | 防止缓冲区溢出污染数据 |
CWE-787-f | 避免缓冲区从受污染的数据中溢出 |
CWE-798-a | 不要硬编码字符串文字 |
CWE-835-a | 避免无限循环 |
CWE-863-a | 不要使用 'cuserid' 函数 |
CWE-89-a | 防止 SQL 注入 |
EXCEPT-22 | 应该在函数声明之前直接在注释中指定可能从函数引发的检查异常 |
EXCEPT-23 | 不要使用抛出异常规范 |
EXCEPT-24 | 如果在单个 'try-catch' 语句或 'function-try-block’中提供了多个处理程序,则任何省略号(全部捕获)处理程序都应最后出现 |
EXCEPT-25 | 不要让 'catch’ 块为空 |
EXCEPT-26 | 避免使用 catch-all 的异常处理程序 |
GLOBAL-REUSEDQUALGLOBVAR | 具有静态存储持续时间的非成员对象的标识符名称不得在命名空间内重用 |
GLOBAL-REUSEDQUALSTATFUN | 非成员静态函数的标识符名称不得在命名空间内重用 |
HICPP-17_2_1-b | 错误指示器 'errno’不得使用 |
HICPP-5_1_6-e | 'typeid’ 运算符的操作数不得包含任何具有副作用的表达式 |
HICPP-5_1_6-f | 'typeid’运算符的操作数不得包含会引起副作用的函数调用 |
INIT-17 | 在所有构造函数中使用相同常量值初始化数据成员的用户定义的构造函数,应改用 NSDMI 进行初始化 |
JSF-024_b | 不得使用 <stdlib.h> 的库函数 'exit’ |
JSF-024_c | 不得使用 <stdlib.h> 的库函数 'getenv’ |
JSF-024_d | 不得使用 <stdlib.h> 的库函数 'system’ |
JSF-134_b | 在函数声明之前的注释中记录函数 |
MISRA2004-20_11_b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
MISRA2004-20_11_c | 不得使用 'stdlib.h’或 'cstdlib’库中的 'getenv()’函数 |
MISRA2004-20_11_d | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'system()'函数 |
MISRA2008-18_0_3_b | 不得使用 <stdlib.h> 的库函数 'exit’ |
MISRA2008-18_0_3_c | 不得使用 <stdlib.h> 的库函数 'getenv’ |
MISRA2008-18_0_3_d | 不得使用 <stdlib.h> 的库函数 'system’ |
MISRA2012-RULE-21_8_b | 不得使用 <stdlib.h> 的库函数 'exit’ |
MISRA2012-RULE-21_8_c | 不得使用 <stdlib.h> 的库函数 'getenv’ |
MISRA2012-RULE-21_8_d | 不得使用 <stdlib.h> 的库函数 'system’ |
MISRA2012-RULE-2_2_b | 避免使用未使用的值 |
MISRAC2012-RULE_21_8-b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
MISRAC2012-RULE_21_8-c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'system()'函数 |
MISRAC2012-RULE_21_8-d | 不得使用 'stdlib.h’或 'cstdlib’库中的 'getenv()’函数 |
MISRAC2012-RULE_2_2-b | 避免使用未使用的值 |
MRM-56 | 复制分配运算符不应有可能会影响复制对象的副作用 |
MRM-57 | 移位分配运算符不应具有可能会影响对象移位的副作用 |
OPT-42 | 虚函数中不得有未使用的命名参数 |
OWASP2017-A1-a | 避免将未经验证的二进制数据传递到日志方法 |
OWASP2017-A1-b | 防止命令注入 |
OWASP2017-A1-c | 避免在输出控制台上打印污染的数据 |
OWASP2017-A1-d | 防止环境注入 |
OWASP2017-A1-e | 从格式字符串中排除未经过滤的用户输入 |
OWASP2017-A1-f | 防止 SQL 注入 |
OWASP2017-A10-a | 所有异常都应重新引发或使用标准记录器记录 |
OWASP2017-A2-a | 不要使用弱加密功能 |
OWASP2017-A3-a | 正确的种子伪随机数生成器 |
OWASP2017-A4-a | 在 libxerces-c 中禁用解析 XML 外部实体(XXE) |
OWASP2017-A5-a | 防止文件名注入 |
OWASP2017-A5-b | 放弃特权时遵守正确的撤销顺序 |
OWASP2017-A5-c | 确保成功放弃特权 |
OWASP2017-A6-a | 如果在单个 try-catch 语句或 function-try-block 中为派生类及其部分或全部基数提供了多个处理程序,则这些处理程序应按最源于基类的顺序排序 |
OWASP2017-A6-b | 不要让 'catch’ 块为空 |
OWASP2017-A6-c | 正确使用 errno 值 |
PB-75_b | 不得使用 'stdlib.h’或 'cstdlib’库中的 'exit()’函数 |
PB-75_c | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'quick_exit()’和 '_Exit()’函数 |
PB-76 | 不得使用 C-style 字符串 |
PB-77 | 表达式语句不应仅是对临时对象的构造函数的显式调用 |
SECURITY-48_b | 不得使用 'stdlib.h’ 或 'cstdlib’库中的 'system()'函数 |
SECURITY-51 | 不要使用 'char’缓冲区存储 'std::cin’的输入 |
SECURITY-52 | 不得使用 'stdlib.h’或 'cstdlib’库中的 'getenv()’函数 |
TEMPL-17 | 如果返回类型前面带有'typename'关键字,请使用结尾的返回类型语法 |
更新规则
我们更新了以下静态分析规则以改善分析结果:
规则类别 | 规则 IDs |
---|---|
AUTOSAR C++14 编码准则 | AUTOSAR-A0_1_4-a, AUTOSAR-A12_1_1-b, AUTOSAR-A12_8_4-a, AUTOSAR-A13_5_4-b, AUTOSAR-A15_4_1-a, AUTOSAR-A15_5_2-b, AUTOSAR-A18_0_1-a, AUTOSAR-A18_9_2-a, AUTOSAR-A27_0_1-d, AUTOSAR-A27_0_2-b, AUTOSAR-A2_8_1-a, AUTOSAR-A3_8_1-a, AUTOSAR-A3_8_1-b, AUTOSAR-A5_1_3-a, AUTOSAR-A5_2_5-c, AUTOSAR-A8_4_5-a, AUTOSAR-A8_4_6-a, AUTOSAR-A8_5_0-a, AUTOSAR-M0_1_3-a, AUTOSAR-M0_1_3-b, AUTOSAR-M0_3_1-b, AUTOSAR-M0_3_1-c, AUTOSAR-M0_3_1-h, AUTOSAR-M0_3_1-j, AUTOSAR-M18_0_3-a, AUTOSAR-M2_13_2-a, AUTOSAR-M5_0_16-b, AUTOSAR-M5_0_18-a, AUTOSAR-M5_0_2-e, AUTOSAR-M5_3_4-c, AUTOSAR-M5_8_1-a, AUTOSAR-M7_5_1-a, AUTOSAR-M8_5_2-c |
流量分析 | BD-CO-ITOUT, BD-PB-CC, BD-PB-CHECKRET, BD-PB-DEREF, BD-PB-NOTINIT, BD-PB-OVERFFMT, BD-PB-OVERFWR, BD-PB-OVERLAP, BD-PB-PTRARR, BD-PB-SIGHAN, BD-RES-FREE, BD-RES-INVFREE, BD-SECURITY-OVERFFMT, BD-TRS-MLOCK, BD-TRS-ORDER |
SEI CERT C | CERT_C-API01-a, CERT_C-ARR38-b, CERT_C-ARR38-c, CERT_C-CON31-b, CERT_C-CON31-c, 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-DCL18-b, CERT_C-DCL30-a, CERT_C-ENV01-c, CERT_C-ERR04-a, CERT_C-ERR05-a, CERT_C-EXP33-a, CERT_C-EXP39-d, CERT_C-EXP44-b, 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-INT31-i, CERT_C-MEM00-d, CERT_C-MEM01-a, CERT_C-MEM30-a, CERT_C-MEM34-a, CERT_C-MSC13-a, CERT_C-MSC14-a, CERT_C-MSC15-a, CERT_C-MSC24-b, CERT_C-POS51-a, CERT_C-SIG30-a, CERT_C-SIG31-a, CERT_C-SIG34-a, CERT_C-STR31-b |
SEI CERT C++ | CERT_CPP-CON53-a, CERT_CPP-ERR50-l, CERT_CPP-EXP52-c, CERT_CPP-EXP53-a, CERT_CPP-EXP54-a, CERT_CPP-EXP54-b, CERT_CPP-MEM50-a, CERT_CPP-MSC54-a, CERT_CPP-STR50-c |
编码约定 | CODSTA-102, CODSTA-103, CODSTA-116, CODSTA-13, CODSTA-163_b, CODSTA-22 |
C++ 的编码约定 | CODSTA-CPP-59, CODSTA-CPP-86 |
Modern C++ 的编码约定 | CODSTA-MCPP-10_a CODSTA-MCPP-13 |
注释 | COMMENT-04 |
格式化 | FORMAT-43 |
高完整性 C++ | HICPP-12_4_2-a, HICPP-17_2_1-a, HICPP-17_3_2-a, HICPP-18_2_2-a, HICPP-18_3_2-a, HICPP-1_2_1-i, HICPP-1_3_1-a, HICPP-1_3_3-a, HICPP-1_3_5-a, HICPP-2_5_2-a, HICPP-3_4_1-a, HICPP-3_5_1-d, HICPP-4_2_2-a, HICPP-5_1_3-a, HICPP-5_1_5-a, HICPP-5_1_6-c, HICPP-7_1_7-a, HICPP-8_4_1-a, HICPP-8_4_1-b |
初始化 | INIT-05, INIT-06 |
联合打击战斗机 | JSF-024, JSF-060_b, JSF-071_b, JSF-077, JSF-085_a, JSF-111, JSF-117_b, JSF-134, JSF-139, JSF-143_a, JSF-149, JSF-164, JSF-166_c, JSF-171, JSF-181_a, JSF-203, JSF-204_a, JSF-204_b |
MISRA C 1998 | MISRA-027, MISRA-044, MISRA-051 |
MISRA C 2004 | MISRA2004-12_1_e, MISRA2004-12_3_c, MISRA2004-12_8, MISRA2004-17_3, MISRA2004-17_6_a, MISRA2004-20_11, MISRA2004-7_1_a, MISRA2004-9_2_c |
MISRA C++ 2008 | MISRA2008-0_1_11, MISRA2008-0_1_3_a, MISRA2008-0_1_3_b, MISRA2008-0_3_1_d, MISRA2008-0_3_1_f, MISRA2008-0_3_1_h, MISRA2008-0_3_1_j, MISRA2008-18_0_1, MISRA2008-18_0_3, MISRA2008-2_13_2_a, MISRA2008-5_0_16_b, MISRA2008-5_0_18, MISRA2008-5_0_2_e, MISRA2008-5_3_4_c, MISRA2008-5_8_1, MISRA2008-7_5_1, MISRA2008-7_5_2_a, MISRA2008-8_5_2_c |
MISRA C 2012 | MISRAC2012-DIR_4_1-d, MISRAC2012-DIR_4_1-f, MISRAC2012-DIR_4_1-h, MISRAC2012-DIR_4_1-j, MISRAC2012-DIR_4_13-b, MISRAC2012-DIR_4_13-c, MISRAC2012-DIR_4_14-i, MISRAC2012-DIR_4_7-a, MISRAC2012-RULE_10_3-b, MISRAC2012-RULE_12_1-a, MISRAC2012-RULE_12_2-a, MISRAC2012-RULE_14_3-ac, MISRAC2012-RULE_16_1-g, MISRAC2012-RULE_16_5-a, MISRAC2012-RULE_18_1-c, MISRAC2012-RULE_18_3-a, MISRAC2012-RULE_18_6-a, MISRAC2012-RULE_19_1-c, MISRAC2012-RULE_1_3-b, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_1_3-e, MISRAC2012-RULE_1_3-m, MISRAC2012-RULE_21_17-b, MISRAC2012-RULE_21_8-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_2-b, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_7_1-a, MISRAC2012-RULE_9_1-a |
内存和资源管理 | MRM-41 |
命名约定 | NAMING-32 |
优化 | OPT-02, OPT-02, OPT-03, OPT-05, OPT-06, OPT-29, OPT-31 |
可能的错误 | PB-11, PB-18, PB-22, PB-23, PB-45, PB-46, PB-47, PB-48, PB-49, PB-50, PB-73, PB-75 |
安全性 | SECURITY-14 |
删除规则
以下规则已删除:
- AUTOSAR-A13_5_4-a
- AUTOSAR-A17_1_1-b
- CERT_C-ENV33-b
- CERT_C-EXP45-a
- CERT_C-EXP45-c
- CERT_C-FLP37-a
- CERT_C-FLP37-b
- CERT_C-INT36-a