Bagikan melalui


InfiniteLoop (Kueri Windows Driver CodeQL)

Gambaran Umum

Perbandingan antara jenis lebar yang berbeda dalam kondisi perulangan dapat menyebabkan perulangan gagal dihentikan.

Rekomendasi

Gunakan jenis yang sesuai dalam kondisi perulangan.

Contoh

Dalam contoh ini, hasil perbandingan dapat mengakibatkan perulangan tak terbatas jika nilai untuk argumen: a lebih besar dari SHRT_MAX:

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

Untuk memperbaiki bug, kami mengubah tipe variabel i agar sesuai dengan lebar dari a.

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

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.