VS2019: C++代码静态分析改进和更新

VS2019: C++代码静态分析改进和更新

作者:BlogUpdater |  时间:2021-03-27 |  浏览:64 |  评论已关闭 条评论

写安全的C++代码
C++代码分析团队的目标是:让我们广大的C++开发者尽可能安全地编写代码。我们正在添加更加丰富的代码检查规则,并修复开发者在社区上反馈的高优先级的Bug。我们感谢一直参与其中的开发者。接下来,C++开发团队将会每次的Visual Studio新版本发布时提供一个完整的代码分析相关的Bug修复列表。
下面我们汇总了从VS2019 16.8到16.9中,修复的所有代码分析和Cpp Core Check相关的Bug以及各项改进。

对崩溃类错误的修复
> 在一个非地址和非数组对象地址使用索引操作符。

> 在分析一个多达255个参数的函数时,会发生崩溃。

> 在动态初始化函数中,数组成员字段的地址被错误的进行转换。

> 修复了对聚合初始化的内部编译错误。

> 修复了分析位字段和枚举时出现的崩溃。

> 指定了一个三个元素的数组,但是在初始化列表中只提供两个元素。

> 修复了空的KMDF项目引发的崩溃

常规Bug修复
> 解决了当可能会初始化或更新对象的函数失败时在对象的析构函数中发出的嘈杂警告。
> 添加了对GSL功能gsl::as_bytes和gsl::as_writable_bytes的支持,以防止针对其他有效缓冲区访问发出C26710警告。

> 修复了将规则集的相对路径与规则集目录的确切路径结合使用时发生的规则集加载失败的问题。 例如:/analyze:rulesetdirectory f:\customRuleset /analyze:ruleset myrules.ruleset

> 修复了if constexpr表达式中C6237和C6285的误报。

> 修复了在返回构造时C26444的误报问题。

> 修复了以下问题:将具有相同源和目标类型的转换错误地识别为重新解释转换,这将产生C26490而不是C26473。

> 修复了尝试抛弃const时出现的不正确的C26465警告。 现在将发出C26492警告。

> 修复了将在常量成员变量上发出的C26814的误报。
> 修复了在检查缓冲区范围时PREFast进入无限循环的极端情况。
> 修复了C26815的误报,该误报是在将值分配给std::optional时触发的,该值通过引用传递到函数中。
> 修复了从指针向量返回指针时出现假阳性C26816的问题。
> 修复了C26485的误报,当对printf的调用使用由三元运算符选择的字符串文字时出现。

其他变化
> 更新了对SARIF格式的支持,以符合2.1版规范。
> 为规则集文件的其他规则操作级别添加了SARIF支持。 现在可以将规则操作指定为“无”,“默认”,“信息”,“警告”和“错误”。
> 删除了C26443 – C.128的强制实施已更改,使C26443过时。

> 使用C样式的void强制转换忽略以前发布的[[nodiscard]]装饰的返回值C26493,敦促开发人员不要使用C样式的强制转换。新规则C26457将在其位置发布,如果他们是否打算放弃返回值,指导开发人员将返回值分配给std::ignore。

> C26496的文本已从“变量’%variable%’仅分配一次,将其标记为const(con.4)”更新为“变量’%variable%’构造后未更改,将其标记为const(con.4)”。

总结
有了来自老大哥的温馨提示,是不是写代码更有感觉了?
希望你可以:写好码,做好人,得好报。

最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Static Analysis Fixes, Improvements, and Updates in Visual Studio 2019 16.9》

标签:

评论已关闭。