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.
Aturan NullCheck memverifikasi bahwa nilai NULL di dalam kode driver tidak didereferensikan nanti di driver. Aturan ini melaporkan cacat jika salah satu kondisi ini benar:
- Ada penugasan NULL yang didereferensikan nanti.
- Ada global/parameter untuk prosedur dalam driver yang mungkin NULL yang didereferensikan nanti, dan ada pemeriksaan eksplisit di driver yang menunjukkan bahwa nilai awal pointer mungkin NULL.
Dengan pelanggaran aturan NullCheck, pernyataan kode yang paling relevan disorot di panel pohon jejak. Untuk informasi selengkapnya tentang bekerja dengan output laporan, lihat Laporan Pemverifikasi Driver Statis dan Memahami Penampil Jejak.
Contoh Struktur
Cuplikan kode ini menunjukkan penggunaan struktur yang tepat.
//Rule does not fail
typedef struct _B {
int *f;
} B;
void GoodStruc(B *x) {
B *y = x;
y->f = NULL; //assign NULL
if (x->f) {
*(x->f) = 1;
} //OK
}
Cuplikan kode ini menunjukkan penggunaan struktur yang tidak tepat. Kode akan dikompilasi, tetapi akan menghasilkan kesalahan runtime.
//Rule fails
typedef struct _A {
int *f;
} A;
void BadStruc(A *x) {
A *y = x;
y->f = NULL; //assign NULL
*(x->f) = 1; //dereferencing NULL
}
Contoh Fungsi
Dalam contoh ini, ada parameter untuk fungsi yang mungkin NULL, yang didereferensikan nanti. Selain itu, ada pemeriksaan eksplisit yang menunjukkan bahwa nilai awal pointer mungkin NULL.
//Rule fails
void Bad(int *x)
{
*x = 2; //Possibly dereferencing NULL
if (x != NULL) //checks for null on a parameter
*x = *x + 1;
}
Dalam contoh ini, tidak ada pelanggaran aturan karena kemungkinan ada prasyarat implisit bahwa parameter tidak diharapkan null.
//Rule does not fail
void Good1(int *x)
{
*x = 2;
*x = *x + 1;
}
Dalam contoh kedua ini, ada pemeriksaan eksplisit untuk NULL, setiap kali parameter digunakan.
//Rule does not fail
void Good2(int *x)
{
if (x != NULL)
*x = 2; // ok
if (x != NULL) //checks for null on a parameter
*x = *x + 1;
}
Model driver: WDM
Cara menguji
| Pada waktu kompilasi |
|---|
Jalankan Pemverifikasi Driver Statis dan tentukan aturan NullCheck . Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver. |