INFINITE_LOOP.MACRO

宏中的无限循环

INFINITE_LOOP 检查器可发现没有出口的循环实例。检查器可以跟踪控制循环退出的变量,并在条件不变时标记缺陷。如果条件的有效性不会在迭代间发生变化,则循环永远不会终止。

INFINITE_LOOP.MACRO 检查器可找到宏中包含的无限循环。INFINITE_LOOP.MACRO 检查器的典型用法是将这类无限循环的检查与退出条件基于局部变量的无限循环的检查分离。当使用 INFINITE_LOOP.LOCAL 检查重要的无限循环时,关闭 INFINITE_LOOP.MACRO 检查器将起到作用。

漏洞与风险

无限循环会导致程序无限期挂断或崩溃,并可能会因过度使用 CPU 或内存资源而导致拒绝服务 (DoS) 攻击。

漏洞代码示例

复制
    #define HALT() do { } while (1)
    void infinite_loop() {
       HALT();
    }

Klocwork 标记该无限循环示例,因为函数将永远不会退出。在该案例中,循环包含在宏 HALT 中,而该宏处于会引起停止的代码中。该示例说明的是在搜索无限循环时一般不想标记的情况,INFINITE_LOOP.MACRO 允许您将其与要标记的代码缺陷类型分离。