다음을 통해 공유


BadOverflowGuard(Windows 드라이버 CodeQL 쿼리)

개요

모든 인수 형식의 크기가 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 및 정적 도구 로고 테스트 페이지를 참조하세요.