写点什么

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

  • 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:282915
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

太全!不愧是Github爆火的阿里812页高并系统设计核心技术全解

程序员小毕

程序员 架构 程序人生 后端 高并发

软件测试面试真题 | Pytest 的内置 fixture 有哪些?

测试人

面试 软件测试 测试开发 测试流程

企业如何建立数据分类分级制度

极盾科技

数据安全 数据分类分级

Spring之控制反转

Andy

低代码在企业数字化转型中有什么价值?

飞算JavaAI开发助手

宝藏级别,GitHub上的SpringBoot核心笔记,讲得太清晰了

程序知音

Spring面试题(部分)

Andy

Go语言入门08—函数

良猿

Go golang 后端 10月月更

Apache IoTDB v0.13.3 发布!

Apache IoTDB

数据库 Apache IoTDB

万物皆可集成系列:低代码对接阿里物流API实现快递跟踪

葡萄城技术团队

前端 低代码 电商 API

Spring之资源读取

Andy

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

Sanitizers 系列之 Sanitizers 概述

网易云信

运维 服务器

拒绝“内鬼式”数据泄露,安全内控如何构建?

极盾科技

重磅 | 青藤蜂巢入围领导者象限,增长指数&综合竞争力第一!

青藤云安全

主机安全 青藤云安全

Spring Framework框架简介

Andy

官宣:新功能正式上线!

青藤云安全

主机安全 青藤云安全 青藤智库

华为云连接CC,助力企业一站式解决跨区域传输难问题

科技怪授

华为云CC链接

一个疯子居然获得北京市科学技术奖?

青藤云安全

青藤云安全 北京科学技术奖

顶会最强的前20%!电影情感效应预测论文拿下ACMMM Oral收录!

阿里巴巴文娱技术

人工智能 情感计算

华为云桌面,随时随地助力企业轻松办公

科技怪授

华为云桌面

Spring之依赖注入

Andy

Spring Boot「17」数据库连接池

Samson

Java spring 学习笔记 spring-boot 10月月更

云原生机甲,真正的服务网格

如水

云原生 servicemesh 云原生机甲 CloudMecha

Apache Kyuubi 在B站大数据场景下的应用实践

网易数帆

hive Kyuubi spark SQL 企业号十月 PK 榜

数组元素积的符号

掘金安东尼

算法 10月月更

​Apache IoTDB UDF 「Sample」的案例与最佳实践

Apache IoTDB

数据库 Apache IoTDB

【web 开发基础】PHP 的流程控制之多向条件分支结构(switch) -PHP 快速入门 (16)

迷彩

switch case switch语句 10月月更 PHP基础 分支结构

【网易云信】Sanitizers 系列之 Sanitizers 概述

网易智企

运维 服务器

跨区域传输数据不够流畅?华为云连接CC了解一下

科技怪授

华为云链接

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