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.