写点什么

一份编程错误列表强调静态代码分析有其必要性

  • 2012-12-19
  • 本文字数:761 字

    阅读完需:约 2 分钟

Program Verification Systems 公司(针对 C 和 C++ 的静态代码分析工具 PVS-Studio 就是该公司的产品)发布了一份编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server 和MySQL 等流行的开源项目中发现的。

这份列表维护的编码错误有150 多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大。

下面是选自该列表的一些错误类型,示例代码都来自真实项目。

V502 ——或许‘?:’运算符的工作方式和想象中并不相同。该运算符的优先级比很多运算符都要低。

MongoDB:

复制代码
string sysInfo() {
....
stringstream ss;
....
ss << (sizeof(char *) == 8) ? " 64bit" : " 32bit";
....
}

这是一个很好的例子。这段代码打印的是 0 或 1,而非“32bit”或“64bit”。

V511 ——在如下表达式中,sizeof 运算符返回的是指针的大小,而非数组的大小。

Chromium:

复制代码
uint8 salt_[LINK_SALT_LENGTH];
VisitedLinkMaster::TableBuilder::TableBuilder(
VisitedLinkMaster* master,
const uint8 salt[LINK_SALT_LENGTH])
: master_(master),
success_(true) {
fingerprints_.reserve(4096);
memcpy(salt_, salt, sizeof(salt));
}

“salt”对象就是一个指针。方括号中的值 LINK_SALT_LENGTH 向程序员表明,他们正在使用的是一个包含 LINK_SALT_LENGTH 个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式 sizeof(salt) 返回的值是 4 或 8(32 位或者 64 位系统上指针的大小)。

到目前为止,这个列表上列出的、出现于各种开源项目的错误,很多可能已经修复。因为任何程序员都难免出错,所以使用一个或多个静态代码分析工具处理一下源代码是个不错的建议。Wikipedia 上有一个页面,列出了很多针对不同语言的静态代码分析工具。

参考英文原文 An Errors List Underscores the Need for Static Code Analysis

2012-12-19 08:282781
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 145.2 次阅读, 收获喜欢 35 次。

关注

评论

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

“碳中和”目标下的绿色金融探索

CECBC

金融

被解救的代码 - 代码即服务时代来了!

阿里巴巴云原生

容器 微服务 开发者 云原生 开发工具

从基础到实战一应俱全,这份全网首发的Kafka技术手册,超详细!

Java架构师迁哥

重磅成果 | 《数据安全治理白皮书3.0》正式对外发布!

DT极客

进大厂的iOS程序员,原来是这样“跳槽”的!

iOS猿_员

打破思维定式(十一)

Changing Lin

架构实战营模块四总结

竹林七贤

“技术+应用”驱动金融科技创新融合

CECBC

金融

云小课 | 一个三分钟快速定制OCR应用的神器,要不?

华为云开发者联盟

AI modelarts OCR ModelArts Pro 开发套件

ElasticSearch架构剖析

五分钟学大数据

大数据 elasticsearch 5月日更

Flink消费Kafka

大数据技术指南

大数据 flink 5月日更

Keycloak 13 自定义用户身份认证流程(User Storage SPI)

Zhang

MySQL spi keycloak 13.0.0 user storage spi

有无社保缴纳识别接口

ALone

业界率先支持 MCP-OVER-XDS 协议,Nacos 2.0.1 + 1.4.2 Release 正式发布

阿里巴巴云原生

容器 微服务 云原生 k8s 中间件

用ABAP 生成二维码 QR Code

汪子熙

二维码 SAP abap

CRM Transaction处理中的权限控制

汪子熙

CRM SAP abap

☕️【Java技术之旅】带你看透Lambda表达式的本质

码界西柚

Java Lambda java8 Lambda函数 5月日更

对比解读《2020年CNCF中国云原生调查报告》

阿里巴巴中间件

全链路压测二十问干货汇总(上)

TakinTalks稳定性社区

腾讯校招都会问些什么?| 五面腾讯(Java岗)经历分享

Java架构师迁哥

5分钟速读之Rust权威指南(三)

wzx

rust

Python--TKinter

若尘

Python编程 5月日更

基于Agora Web SDK自定义直播画面

dajyaretakuya

WebRTC 声网 Agora 数字合成

图说丨一图看懂浪潮云“1231”业务战略

2021 iOS 进阶学习视频推荐

程序员 ios开发

新融合,新跳板:智能云网如何让企业数字化转型,起步即领先?

脑极体

4年Java开发经验,经常被问到高并发、性能调优方面的问题,该怎么办?

Java架构师迁哥

网络攻防学习笔记 Day17

穿过生命散发芬芳

5月日更 网络攻防

2021最热门的20个数据库学习总结,你会用哪几个?

北游学Java

Java MySQL 数据库 后端

15年云原生实践,在关键节点我们做对了什么? | 云原生大咖说

阿里巴巴中间件

中国区块链第一村的价值裂变

CECBC

一份编程错误列表强调静态代码分析有其必要性_语言 & 开发_Abel Avram_InfoQ精选文章