Suatu hari, Google menerbitkan kode sumber untuk parser robots.txt. Mengapa tidak menjalankan proyek yang sudah diuji naik turun oleh PVS-Studio dan mungkin menemukan kesalahan. Tidak lebih cepat dikatakan daripada dilakukan. Sangat disayangkan bahwa tidak ada yang signifikan dapat ditemukan. Kalau begitu, biarkan itu hanya alasan untuk memuji pengembang Google.
robots.txt - file indeks yang berisi aturan untuk robot pencarian. Ini berlaku untuk protokol https, http, dan ftp. Google telah membuat parser 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 artikel kami tahu apa yang dilakukan PVS-Studio. Tetapi jika Anda baru di blog kami, kami akan memberikan referensi singkat. PVS-Studio adalah penganalisa kode statis yang memungkinkan Anda menemukan berbagai kesalahan, kerentanan, dan kekurangan dalam proyek yang ditulis dalam C, C ++, C # dan Java. Dengan kata lain, PVS-Studio adalah solusi
SAST dan dapat bekerja baik pada mesin pengguna atau membangun server, dan di
cloud . Dan tim PVS-Studio suka menulis
artikel tentang memeriksa berbagai proyek. Jadi mari kita beralih ke bisnis dan mencoba untuk menemukan kesalahan dalam kode sumber parser dari Google.
Untuk penyesalan kami, dan, untuk menyenangkan semua orang, tidak ada kesalahan yang ditemukan. Hanya beberapa kekurangan kecil yang ditemukan, yang akan kita bicarakan. Anda harus menulis setidaknya sesuatu :). Tidak adanya kesalahan dijelaskan oleh volume proyek yang kecil dan kualitas tinggi dari kode itu sendiri. Ini tidak berarti bahwa beberapa kesalahan tidak disembunyikan di sana, tetapi analisis statis ternyata tidak berdaya saat ini.
Secara umum, artikel ini muncul dalam semangat publikasi kami yang lain, "
Artikel terpendek tentang verifikasi nginx ."
Ada kemungkinan optimasi kecil:
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; }
Memanggil fungsi
strlen untuk mencari tahu apakah string tidak kosong adalah cara yang tidak efisien. Pemeriksaan semacam itu dapat dibuat lebih sederhana:
if (* key [0]! = '\ 0') , dan Anda tidak perlu melalui semua elemen 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
path dideklarasikan, tetapi tidak digunakan lebih lanjut. Dalam beberapa kasus, variabel yang tidak digunakan dapat mengindikasikan kesalahan. Tetapi di sini tampaknya bahwa sebelumnya variabel ini entah bagaimana digunakan, tetapi setelah melakukan perubahan itu tidak lagi diperlukan. Dengan demikian, penganalisa sering juga membantu untuk membuat kode lebih bersih dan membantu menghindari kesalahan dengan hanya menghapus prasyarat untuk penampilan mereka.
Dalam kasus berikut, penganalisa, pada dasarnya, membuat rekomendasi untuk menambahkan pengembalian default setelah semua
utama diproses. Mungkin perlu menambahkan
pengembalian di akhir sehingga Anda dapat memahami bahwa semuanya benar-benar berfungsi. Namun, jika perilaku ini direncanakan dan tidak ada yang perlu diubah, dan saya tidak ingin melihat pesan penganalisa, maka dalam kasus PVS-Studio Anda dapat menekan peringatan ini 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; } }
Ditemukan juga bahwa dua fungsi di bawah ini, dengan nama yang berbeda, memiliki implementasi yang sama. Mungkin ini adalah hasil dari fakta bahwa sebelum fungsi-fungsi ini memiliki logika berbeda, tetapi sampai pada hal yang sama. Atau 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; }
Ini satu-satunya tempat yang membuatku curiga. Itu harus diperiksa oleh penulis proyek.
Dengan demikian, verifikasi parser robots.txt dari Google menunjukkan bahwa proyek yang begitu aktif digunakan dan, kemungkinan besar, berulang kali memeriksa kesalahan, memiliki kode berkualitas tinggi. Dan kekurangan yang ditemukan sama sekali tidak dapat merusak kesan tentang apa coders keren dari Google yang terlibat dalam proyek ini :).
Kami menawarkan Anda untuk
mengunduh dan mencoba PVS-Studio pada proyek yang Anda minati.

Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Victoria Khanieva.
PVS-Studio ingin tetapi tidak dapat menemukan bug di robots.txt