前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【规则分享】C/C++整型溢出缺陷检查

【规则分享】C/C++整型溢出缺陷检查

作者头像
擒兽一号
发布2024-09-27 13:54:29
400
发布2024-09-27 13:54:29
举报
文章被收录于专栏:腾讯云代码分析

官网地址:https://tca.tencent.com/

官网介绍:https://cloud.tencent.com/product/tcap 官方开源:(点击最下方【阅读原文】可直达)https://github.com/Tencent/CodeAnalysis 国内镜像:https://git.code.tencent.com/Tencent_Open_Source/CodeAnalysis

规则介绍

规则名称:bugprone-implicit-widening-of-multiplication-result

该规则是Clang-Tidy 中的一个警告规则。

这个规则主要关注整数乘法表达式,当两个整数相乘时,如果它们的乘积超出了目标类型的表示范围,就会发生整型溢出。这可能导致未定义行为,如程序崩溃或结果错误。

该规则会分析和防止整数乘法中的溢出缺陷,从而提高代码的正确性和稳定性。

案例:

代码语言:javascript
复制
int foo(int a, int b) {
  return a * b; // Clang-Tidy 将报告这个乘法表达式可能导致整数溢出。
}

int main() {
  int x = 0x7fffffff; // x 是一个较大的正整数。
  int y = 2;

  int z = foo(x, y); // 由于整型溢出,z 的值可能是一个负数,导致错误的结果。

  return 0;
}

tips:为了修复这个问题,可以将乘法操作的结果显式地转换为更大的类型,例如 long long,这样,即使乘法操作导致溢出,结果也将以正确的类型返回:

代码语言:javascript
复制
long long foo(int a, int b) {
  return static_cast<long long>(a) * static_cast<long long>(b);
}

规则使用说明

分析方案 -> 规则配置 -> 自定义规则包 -> 添加规则 ->搜索规则名bugprone-implicit-widening-of-multiplication-result->完成批量添加

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云代码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 规则介绍
  • 规则使用说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档