Suatu hari Google mengungkapkan sumber parser robots.txt. Mengapa tidak menjalankan proyek yang sudah diperiksa jauh menggunakan PVS-Studio dan mungkin menemukan bug. Begitu kata dilakukan begitu. Tetapi saya berharap kita dapat menemukan sesuatu yang bermakna. Baiklah, biarlah itu hanya alasan untuk memberi nilai penuh bagi pengembang Google.
robots.txt - adalah file indeks yang berisi aturan untuk robot pencarian. Ini berfungsi untuk protokol https, http dan FTP. Google membuat pengurai file robots.txt tersedia untuk semua orang. Baca lebih lanjut tentang berita ini di sini:
Google membuka kode sumber parser robots.txtSaya pikir sebagian besar pembaca kami tahu apa yang dilakukan PVS-Studio. Tetapi jika ini pertama kalinya Anda di blog kami, saya akan memberikan referensi singkat. PVS-Studio adalah penganalisa kode statis yang memungkinkan Anda menemukan berbagai bug, kerentanan, dan kekurangan dalam proyek yang ditulis dalam C, C ++, C # dan Java. Dengan kata lain, PVS-Studio adalah solusi
SAST dan dapat bekerja pada mesin pengguna, membangun server dan di
cloud . Tim PVS-Studio juga suka menulis
artikel tentang cek berbagai proyek. Jadi mari kita langsung ke pokok permasalahan dan mencoba menemukan kesalahan dalam kode sumber parser dari Google.
Sayangnya, tetapi untuk menyenangkan semua orang, tidak ada kesalahan yang ditemukan. Hanya beberapa kekurangan kecil, yang akan saya ceritakan. Yah, saya harus menulis sesuatu tentang proyek ini :). Kurangnya kesalahan disebabkan oleh jumlah proyek yang kecil dan kualitas tinggi dari kode itu sendiri. Ini tidak berarti bahwa tidak ada kesalahan tersembunyi, tetapi analisis statis tidak berdaya pada saat itu.
Jadi artikel ini kebetulan berada dalam semangat postingan kami yang lain "
Artikel Terpendek tentang Pemeriksaan nginx ".
Saya menemukan sebuah kasus dengan kemungkinan optimasi:
V805 Menurunkan Kinerja. Tidak efisien untuk mengidentifikasi string kosong dengan menggunakan konstruksi 'strlen (str)> 0'. Cara yang lebih efisien adalah dengan memeriksa: str [0]! = '\ 0'. robots.cc 354
bool RobotsTxtParser::GetKeyAndValueFrom(char **key, ....) { .... *key = line; .... if (strlen(*key) > 0) { .... return true; } return false; }
Tidak efisien untuk memanggil fungsi
strlen untuk mencari tahu apakah sebuah string kosong. Pemeriksaan ini bisa lebih sederhana:
if (* key [0]! = '\ 0'). Dengan cara ini Anda tidak perlu melintasi seluruh string, jika tidak kosong.
Objek 'jalur' tipe V808 dari tipe 'basic_string' dibuat tetapi tidak digunakan. robots.cc 123
std::string GetPathParamsQuery(....) { std::string path; .... }
String dideklarasikan, tetapi tidak digunakan lebih lanjut. Dalam beberapa kasus, variabel yang tidak digunakan dapat mengindikasikan kesalahan. Dalam hal ini, sepertinya variabel ini digunakan entah bagaimana, tetapi setelah melakukan perubahan itu menjadi tidak perlu. Dengan demikian, penganalisa sering membantu untuk membuat kode lebih bersih dan membantu menghindari kesalahan dengan hanya menghapus prasyarat untuk penampilan mereka.
Dalam kasus berikutnya, penganalisa merekomendasikan untuk menambahkan pengembalian default setelah seluruh
main dieksekusi. Mungkin perlu menambahkan pernyataan
kembali di akhir untuk memahami bahwa semuanya benar-benar berhasil. Namun, jika perilaku tersebut dimaksudkan, tidak ada yang perlu diubah. Jika Anda tidak ingin melihat peringatan ini, di PVS-Studio Anda dapat menekannya dan tidak pernah melihatnya lagi :).
V591 Fungsi 'utama' tidak mengembalikan nilai, yang setara dengan 'mengembalikan 0'. Ada kemungkinan bahwa ini adalah perilaku yang tidak diinginkan. robots_main.cc 99
int main(int argc, char** argv) { .... if (filename == "-h" || filename == "-help" || filename == "--help") { ShowHelp(argc, argv); return 0; } if (argc != 4) { .... return 1; } if (....) { .... return 1; } .... if (....) { std::cout << "...." << std::endl; } }
Saya juga menemukan bahwa dua fungsi di bawah ini yang memiliki nama berbeda diimplementasikan dengan cara yang sama. Mungkin ini adalah hasil dari fakta bahwa sebelumnya fungsi-fungsi ini memiliki logika yang berbeda, tetapi sampai pada satu. Mungkin kesalahan ketik merayap di suatu tempat, jadi peringatan seperti itu harus diperiksa dengan cermat.
V524 Aneh bahwa tubuh fungsi 'MatchDisallow' sepenuhnya setara dengan tubuh fungsi 'MatchAllow'. robots.cc 645
int MatchAllow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } int MatchDisallow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; }
Itu satu-satunya tempat aku curiga. Itu harus diperiksa oleh penulis proyek.
Dengan demikian, pemeriksaan parser robots.txt dari Google menunjukkan bahwa proyek ini, yang telah diperiksa berulang kali dan digunakan secara luas, memiliki kualitas yang sangat baik. Bahkan beberapa kelemahan yang ditemukan tidak dapat merusak kesan Google coders keren menulis proyek ini :).
Kami menyarankan Anda juga
mengunduh dan mencoba PVS-Studio pada proyek yang Anda minati.