Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Обзор
Проверка переполнения дополнения путем сравнения с одним из аргументов добавления завершается ошибкой, если размер всех типов аргументов меньше 4 байт. Это связано с тем, что результат сложения повышен до 4-байтового int.
Рекомендация
Проверьте переполнение, сравнивая добавление со значением, равным не менее 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 and the Static Tools Logo Test.