Поделиться через


InfiniteLoop (запрос CodeQL для драйвера Windows)

Обзор

Сравнения между типами разных ширин в условии цикла могут привести к сбою цикла.

Рекомендация

Используйте соответствующие типы в условии цикла.

Пример

В этом примере результат сравнения может привести к бесконечному циклу, если значение аргумента a больше, чем SHRT_MAX.

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

Чтобы устранить ошибку, мы изменим тип переменной i, чтобы она соответствовала ширине:

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

Дополнительные сведения

Этот запрос можно найти в репозитории Microsoft GitHub CodeQL. Подробности о том, как разработчики драйверов Windows могут скачать и запустить CodeQL, см. на странице CodeQL and the Static Tools Logo Test.