写点什么

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

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

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

关注

评论

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

软件测试学习笔记丨Selenium多frame切换

测试人

软件测试

财务规划的成功战略之一:建立数据驱动型决策

智达方通

数据分析 企业管理 财务分析 财务管理 财务规划

【DevOps系列】DevOps工具链选型指南

嘉为蓝鲸

DevOps 工具链

SQL-DSL框架之结果集处理

邱学喆

JDBC 类型处理器 配置类

python ES连接服务器的方法

EquatorCoco

Python 服务器

Next Stack技术联盟成立:打造新一代基础软件技术栈

观测云

next stack

五大场景实践 深度解读指标平台业务价值

Aloudata

腾讯云大神呕心沥血整理:redis深度笔记”,看完全面掌握redis核心技术

采菊东篱下

redis java面试

对象存储防勒索升级:XEOS 国内首家通过 NBU 对象锁认证

XSKY星辰天合

【DevOps系列】CICD流程建设之持续集成实践指南

嘉为蓝鲸

DevOps 持续集成 CI/CD

喜报!博睿数据再获“信创工委会技术活动单位”称号

博睿数据

重构商业生态:DApp创新玩法与盈利模式的深度剖析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

选择堡垒机供应商需要考虑因素简单分析-行云管家

行云管家

堡垒机 网龄安全

如何炼就 AI 原住民的“自我修养”丨通义灵码走进北京大学创新课堂

阿里巴巴云原生

阿里云 云原生 通义灵码

IoTDB 探索季活动|大疆无人机等你来拿

Apache IoTDB

软件测试学习笔记丨Selenium弹窗操作

测试人

软件测试

快速过等保2.0的小秘诀!

行云管家

等保 堡垒机 等保测评

如何炼就 AI 原住民的“自我修养”丨通义灵码走进北京大学创新课堂

阿里云云效

阿里云 云原生 通义灵码

一文彻底弄懂MySQL的优化

快乐非自愿限量之名

MySQL 数据库

Why AR9342, AR9344, IPQ4018 and IPQ4028 chip motherboards have faded from the market?

wifi6-yiyi

wifi 11n 11ac 11be

枫清科技高雪峰:大模型要成为生产力才有生命力

Fabarta

#人工智能

居家观影T0级装备 非激光电视莫属

Geek_2d6073

Apache Seata(incubating) 首个版本重磅发布!

阿里巴巴云原生

Apache 阿里云 云原生

如何妥善处理 TCP 代理中连接的关闭

不在线第一只蜗牛

网络协议 网络

Footprint Analytics 现已支持 TRON 链上数据分析

Footprint Analytics

TRONex波场智能合约

鸿蒙NEXT应用上架与分发步骤详解

威哥爱编程

华为 HarmonyOS Open Harmony HarmonyOS框架 HarmonyOS NEXT

【核电科技企业】构建一体化服务器智能运维平台,助力降本增效

嘉为蓝鲸

AIOPS 运维‘ 一体化运维

【DevOps系列】需求的层次结构:业务驱动的协作与产品导向的交付

嘉为蓝鲸

DevOps 需求分析

「用户故事」 从 Thanos 到 GreptimeDB,我们实现了 Prometheus 高效长期存储

Greptime 格睿科技

数据库 云原生 数据迁移

从云原生到 AI 原生,网关的发展趋势和最佳实践

阿里巴巴云原生

阿里云 云原生 网关

80%腾讯程序员都在用,腾讯云AI代码助手让编码提效42%

科技热闻

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