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


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

Общие сведения

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

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

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

Пример

В этом примере результат сравнения может привести к бесконечному циклу, если значение аргумента : больше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 и static Tools Logo Test .