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
Struct atau kelas yang baru dialokasikan yang diinisialisasi setiap anggotanya dapat membocorkan informasi jika termasuk byte padding.
Rekomendasi
Pastikan semua byte yang digunakan untuk padding di struktur atau kelas sudah diinisialisasi.
Jika memungkinkan, gunakan memset untuk menginisialisasi seluruh struktur/kelas.
Contoh
Contoh berikut menunjukkan skenario di mana padding antara elemen pertama dan kedua tidak diinisialisasi:
typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn()
{
// BAD: Padding between the first and second elements not initialized.
MyStruct myBadStackStruct = { Unknown };
return myBadStackStruct;
}
Untuk memperbaikinya, kami akan menginisialisasi semua byte menggunakan memset:
typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn()
{
// GOOD: All padding bytes initialized
MyStruct* myGoodHeapStruct = (struct MyStruct*)malloc(sizeof(struct MyStruct));
memset(myGoodHeapStruct, 0, sizeof(struct MyStruct));
return *myGoodHeapStruct;
}
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.