Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

用 PVS 在.NET 内核中发现的缺陷

  • 2015 年 3 月 22 日
  • 本文字数:667 字

    阅读完需:约 2 分钟

PVS Studio 的作者是一名 C++ 静态分析师,他公布了对 CoreCLR 源代码的研究结果。虽然他的主要意图是演示工具,但它也揭示了写零缺陷的 C++ 代码是多么地难。

他们找到的第一个缺陷是手误的错误。看看下面这行代码:

复制代码
if ((tree->gtOper == GT_CLS_VAR ||
tree->gtOper == GT_CLS_VAR) && i == 1)

很显然,它把一个变量与一个常量比较了两次,所以这可能是个复制 - 粘贴的错误。(这种错误可能在任何语言中都会存在。)

它们发现的另一个手误的错误应该会发生在 C 风格的语言中,那就是变量初始化它自身。

复制代码
CorElementType elemType = elemType = TryEncodeUsingShortcut(pMT);

到现在为止所说的缺陷都比较容易通过代码审查找出来。下面这个就不行喽:

复制代码
CodeGenInterface::CodeGenInterface(Compiler* theCompiler) :
compiler(theCompiler),
gcInfo(theCompiler), regSet(theCompiler, gcInfo)
{
}

只通过这段代码你发现不了什么,但是 regSet 要在 gcInfo 之前初始化。 Svyatoslav Razmyslov 解释说,

标准规定,在构建函数中的类成员初始化的顺序和它们在该类中的声明顺序是一样的。为了修复这个错误,我们应该移动类成员’gcInfo’声明的位置。

如果不用类似于 PVS Studio 这样的工具,那么发现这类缺陷的唯一方式就是手工比较这些成员变量声明的顺序以及它们在构造函数中需要被初始化的顺序。另外,无知的重构(比如把域按字母顺序予以排列)也会引入缺陷。

那么重点在于,C++ 编程如此之难。还有更多的例子,可阅读此篇文章: PVS-Studio: 25 Suspicious Code Fragments in CoreCLR .

查看英文原文: Using PVS to Find Bugs in .NET Core

2015 年 3 月 22 日 00:171198

评论

发布
暂无评论
发现更多内容

网易应用创新开发者大赛成功在杭举办,十强队伍现场比拼

网易云信

人工智能 音视频 直播

偷天换日,用JavaAgent欺骗你的JVM

码农参上

字节码插桩 代理 探针 签约计划第二季

单库单应用 && 内容分发

空空

架构设计

安全攻防实战系列MSF

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

即时通讯(IM)开源项目OpenIM本周版本发布-v1.0.6

OpenIM

ipvs localhost 为何不正常

Geek_f24c45

k8s IPVS kube-proxy

质量基础设施“一站式”服务信息平台建设,NQI一站式服务平台

电微13828808271

2021商业评论管理行动力峰会

大咖说

商业 直播

蒙娜丽莎Rap的秘密!这个AI算法绝不能错过!!!

百度开发者中心

AI

编译优化后,for循环中i++和++i究竟哪个效率高?

码农参上

字节码 编译优化 签约计划第二季

Android C++系列:Linux线程(三)线程属性

轻口味

android 28天写作 12月日更

【混合云】部分混合云管理平台大汇总

行云管家

云计算 公有云 混合云 云管平台

多级缓存 && 分库分表

空空

架构设计

动图图解GC算法 - 让垃圾回收动起来!

码农参上

垃圾回收 垃圾回收算法 签约计划第二季

微服务

空空

架构设计

可视化埋点在 React Native 中的实践

Shopee技术团队

大前端 可视化 埋点 React Native

浅谈Java编译优化之常量折叠技术

码农参上

编译器优化 签约计划第二季

Redis 的事务支持 ACID 么?

码哥字节

redis 事务 ACID 签约计划第二季

热门Scrum敏捷看板工具

Leangoo领歌- Amy

项目管理 Scrum 敏捷开发 研发管理 产品研发

【Promise 源码学习】第十三篇 - Promise.allsettled 和 Promise.any 的实现

Brave

源码 Promise 12月日更

架构模式及其应用 | 内部分享

空空

内容合集 签约计划第二季

Smack库 XMPP Tigase异常SASLErrorException

Changing Lin

12月日更

弹性伸缩 && 多机房

空空

架构设计

AI模型也需要资产管理,星环科技重磅推出AI运营平台MLOps 星环科技 星环科技

星环科技

AI

vivo 敏感词匹配系统的设计与实践

vivo互联网技术

服务器 内容审核 架构设计实战 文本检测

未来“数”于你 | 墨天轮携手 Vertica 发布技术文章征集令,双重大奖蓄势待“发”

墨天轮

数据库 征文大赛 vertica

目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?

行云管家

网络安全 等保 堡垒机 等级保护

查询分离

空空

架构设计

Redis 6.X Cluster 集群搭建

码哥字节

redis cluster 签约计划第二季

信也科技 x StarRocks:打造统一销售数据平台

StarRocks

数据库 高并发 StarRocks

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

用PVS在.NET内核中发现的缺陷_.NET_Jonathan Allen_InfoQ精选文章