Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.