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

不应产生或依赖未定义的行为

1.15 ID_undefinedBehavior
目录 › next › previous

未定义的行为(undefined behavior)是指程序在语言标准中没有定义的行为,一般由错误的代码实现引起,可能是崩溃,也可能没有实质危害,这种行为的结果是不可预期的,不应使程序产生或依赖未定义的行为。

对未定义行为的介绍和约束是本规则集合的重要内容,将在后续章节中深入讨论,在附录中也有详细介绍。

示例:

int foo(int i) {
    if (i + 1 <= i)   // Determine overflow, but it’s undefined
        ....          // Handle overflow, may be invalid
    else
        return i + 1;
}

示例代码用 i + 1 <= i 判断是否溢出,但有符号整数溢出的后果是未定义的,这种判断可能是无效的,甚至某些编译器会认为 i + 1 <= i 恒为假而免去 if 分枝,直接返回 i + 1。

应改为:

int foo(int i) {
    if (i != INT_MAX)   // Well defined
        return i + 1;
    else
        ....            // Handle overflow
}

相关

ID_unspecifiedBehavior ID_implementationDefinedFunction

依据

ISO/IEC 9899:2011 3.4.3 ISO/IEC 9899:2011 J.2 ISO/IEC 14882:2011 1.3.24

参考

CWE-758 SEI CERT MSC15-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.