Bagikan melalui


BadOverflowGuard (Kueri CodeQL Driver Windows)

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 dipromosikan menjadi 4 byte int.

Rekomendasi

Periksa luapan dengan membandingkan penambahan dengan nilai setidaknya 4 byte.

Contoh

Dalam contoh ini, hasil perbandingan akan menghasilkan 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 CodeQL Microsoft GitHub. Lihat CodeQL dan halaman Uji Logo Alat Statis untuk detail tentang bagaimana pengembang Driver Windows dapat mengunduh dan menjalankan CodeQL.