☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

指针与整数不应相互转换

12.7 ID_ptrIntCast
目录 › next › previous

指针与整数相互转换容易造成地址不完整、寻址错误、降低可移植性等多种问题。

指针与整数的转换由实现定义,整数的符号和取值范围可能与指针有冲突,错误的值转为指针也会导致标准未定义的行为。在某些平台上指针与 size_t 可以安全转换,但不具备可移植性,审计工具不妨通过配置决定是否放过这种转换。C 标准规定指针可以转为 intptr_t 或 uintptr_t,但也声明了这些类型不是编译器必须实现的类型。

示例:

void foo(int* p) {
    vector<int> v;
    v.emplace_back((int)p);  // Non-compliant
    ....
}

例中将指针转为 int 是不符合要求的,指针的值可能会超过 int 的范围。

配置

allowPointerToSizeType: 是否放过指针与 size_t 的转换

相关

ID_fixedAddrToPointer

依据

ISO/IEC 9899:1999 6.3.2.3(5)-implementation ISO/IEC 9899:1999 7.18.1.4(1) ISO/IEC 9899:2011 6.3.2.3(5)-implementation ISO/IEC 9899:2011 7.20.1.4(1) ISO/IEC 14882:2003 5.2.10(4 5)-implementation ISO/IEC 14882:2011 3.7.4.3(1) ISO/IEC 14882:2011 5.2.10(4 5)-implementation

参考

MISRA C 2004 11.3 MISRA C 2012 11.4 MISRA C++ 2008 5-2-9 SEI CERT INT36-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.