Bagikan melalui


BadOverflowGuard (Windows Driver CodeQL Query)

Gambaran Umum

Memeriksa luapan penambahan dengan membandingkan dengan salah satu argumen penambahan gagal jika ukuran semua jenis argumen lebih kecil dari 4 byte. Ini karena hasil penambahan diubah menjadi int 4 byte.

Rekomendasi

Periksa overflow dengan membandingkan hasil penambahan terhadap nilai yang bernilai setidaknya 4 byte.

Contoh

Dalam contoh ini, hasil perbandingan akan mengakibatkan luapan bilangan bulat:

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;
}

Untuk memperbaiki bug, periksa luapan dengan membandingkan penambahan dengan nilai setidaknya 4 byte:

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

Detail Tambahan

Kueri ini dapat ditemukan di repositori Microsoft GitHub CodeQL. Lihat halaman CodeQL dan Static Tools Logo Test untuk detail tentang bagaimana pengembang Driver Windows dapat mengunduh dan menjalankan CodeQL.