Bagikan melalui


Peringatan C28750

Penggunaan lstrlen yang dilarang dan variannya: '*function-name' adalah API yang dilarang untuk tujuan penanganan kesalahan yang ditingkatkan.

Peringatan ini menunjukkan bahwa fungsi sedang digunakan yang telah dilarang dan memiliki penggantian yang lebih kuat atau aman. Kesalahan spesifik ini menunjukkan penggunaan lstrlen atau variannya.

Keterangan

Fungsi lstrlen dan variannya dilarang karena gagal mengirimkan pengecualian. Hal ini dapat menyebabkan kondisi kesalahan terjadi jauh kemudian, berpotensi pada utas yang berbeda. Ini membuat kondisi kesalahan lebih sulit untuk didiagnosis. Selain itu, fungsi pengganti yang setara dapat dioptimalkan oleh kompilator dan menghindari overhead performa penangan pengecualian (__try dan blok __except).

Mitigasi yang benar adalah menggunakan fungsi panjang string yang lebih aman (biasanya strlen, wcslen, _tcslen). Namun, saat Anda meninjau perubahan lstrlen, Anda harus mengonfirmasi bahwa buffer string berasal dari kode tepercaya. Jika Anda berurusan dengan data yang tidak tepercaya, Anda harus beralih dari keluarga fungsi strlen ke keluarga strnlen (atau keluarga StringCchLength), yang akan memastikan mereka tidak melewati batas blok data yang tidak tepercaya.

Perhatikan bahwa tidak seperti lstrlen, tidak ada pengganti yang menangkap pengecualian. Selain itu, lstrlen menangani penunjuk NULL sementara penggantian tidak, sehingga pemeriksaan NULL eksplisit diperlukan saat mengganti lstrlen dengan strlen atau strnlen (jika penunjuk NULL dimungkinkan pada saat itu dalam kode).

Daftar semua fungsi terlarang yang dicakup oleh kesalahan ini dan penggantian yang direkomendasikan (untuk data tepercaya dan tidak tepercaya) dapat ditemukan setelah contoh berikut.

Nama analisis kode: BANNED_API_USAGE_LSTRLEN

Contoh

Kode berikut menghasilkan peringatan ini:

int example_func(char* in)
{ 
    int size = lstrlen(in);
    return size; 
} 

Hal ini disebabkan oleh penggunaan fungsi lstrlen yang tidak aman. Untuk memperbaiki masalah ini, kita dapat menggunakan strlen sebagai pengganti, memastikan untuk memeriksa apakah penunjuk adalah NULL:

int example_func(char* in) 
{ 
    if (in != NULL) {
        int size = strlen(in);
        return size;
    }
    else {
        // handle error.
    }
} 

Fungsi Terlarang

API Terlarang Penggantian data tepercaya Penggantian data yang tidak tepercaya
lstrlen _tcslen _tcsnlen, StringCchLength
lstrlenA strlen strnlen, StringCchLengthA
lstrlenW wcslen wcsnlen, StringCchLengthW