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


BadOverflowGuard (КодQL-запрос драйвера Windows)

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

Проверка переполнения сложения путем сравнения с одним из аргументов сложения завершается ошибкой, если размер всех типов аргументов меньше 4 байт. Это связано с тем, что результат сложения повышается до 4-байтового целого числа.

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

Проверьте переполнение, сравнив сложение со значением не менее 4 байт.

Пример

В этом примере результат сравнения приведет к переполнению целочисленного числа:

unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
    if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
    {
        // ... do something
    }
    return v + b;
}

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

unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
    if (v + b > 0x00FFFF)
    {
        // ... do something
    }
    return v + b;
}

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

Этот запрос можно найти в репозитории Microsoft GitHub CodeQL. Дополнительные сведения о том, как разработчики драйверов Windows могут скачать и запустить CodeQL, см. на странице CodeQL и static Tools Logo Test .