PVS-Studio चाहता था, लेकिन robots.txt में बग नहीं खोज सका

चित्र 1

दूसरे दिन Google ने robots.txt पार्सर के स्रोतों का खुलासा किया। पीवीएस-स्टूडियो का उपयोग करके पहले से ही दूर और विस्तृत जांच के लिए रन क्यों न दें और संभवतः एक बग ढूंढें। तो ऐसा कहा। लेकिन मेरी इच्छा है कि हमें कुछ सार्थक मिले। ठीक है, तो इसे Google डेवलपर्स के लिए पूर्ण अंक देने के लिए सिर्फ एक कारण होने दें।

robots.txt - एक अनुक्रमणिका फ़ाइल है जिसमें खोज रोबोट के लिए नियम हैं। यह https, http और FTP प्रोटोकॉल के लिए काम करता है। Google ने robots.txt फ़ाइल का पार्सर सभी के लिए उपलब्ध कराया। इस खबर के बारे में यहां और पढ़ें: Google ने robots.txt पार्सर का स्रोत कोड खोला

मुझे लगता है कि हमारे अधिकांश पाठक जानते हैं कि पीवीएस-स्टूडियो क्या करता है। लेकिन अगर यह आपके ब्लॉग पर पहली बार है, तो मैं एक संक्षिप्त संदर्भ दूंगा। PVS-Studio एक स्थिर कोड विश्लेषक है जो आपको C, C ++, C # और Java में लिखी परियोजनाओं में विभिन्न प्रकार की बग, भेद्यता और खामियों को खोजने की अनुमति देता है। दूसरे शब्दों में, पीवीएस-स्टूडियो एक एसएएसटी समाधान है और यह उपयोगकर्ता मशीनों, सर्वरों का निर्माण और क्लाउड में दोनों पर काम कर सकता है। पीवीएस-स्टूडियो टीम भी विभिन्न परियोजनाओं के चेक पर लेख लिखना पसंद करती है। तो आइए इस बिंदु पर जाएं और Google से पार्सर के स्रोत कोड में त्रुटियों को खोजने का प्रयास करें।

दुर्भाग्य से, लेकिन हर किसी की खुशी के लिए, कोई गलती नहीं मिली। केवल कुछ छोटी-मोटी खामियां, जिनके बारे में मैं बताऊंगा। खैर, मुझे प्रोजेक्ट के बारे में कुछ लिखना है :)। त्रुटियों की कमी परियोजना की छोटी मात्रा और स्वयं कोड की उच्च गुणवत्ता के कारण है। इसका मतलब यह नहीं है कि कोई छिपी हुई त्रुटि नहीं है, लेकिन उस समय स्थैतिक विश्लेषण असहाय था।

तो यह लेख हमारे एक और पोस्ट " द नाइनटेक्स ऑफ़ ए चेक ऑफ़ नग्नेक्स " की भावना में हुआ।

मुझे संभव अनुकूलन के साथ एक मामला मिला:

V805 प्रदर्शन में कमी। 'Strlen (str)> 0' कंस्ट्रक्शन का उपयोग करके एक खाली स्ट्रिंग की पहचान करना अक्षम है। एक और अधिक कुशल तरीका जाँच करना है: str [0]! = '\ 0'। robots.cc 354

bool RobotsTxtParser::GetKeyAndValueFrom(char **key, ....) { .... *key = line; .... if (strlen(*key) > 0) { .... return true; } return false; } 

यह स्ट्रिंग को खाली है या नहीं यह पता लगाने के लिए स्ट्रैलेन फ़ंक्शन को कॉल करना अक्षम है। यह जाँच अधिक सरल हो सकती है: यदि (* कुंजी [0]! = '\ 0')। इस तरह से आपको पूरे स्ट्रिंग को नहीं करना है, अगर यह खाली नहीं है।

V808 'पथ' ऑब्जेक्ट 'basic_string' प्रकार बनाया गया था, लेकिन उपयोग नहीं किया गया था। robots.cc 123

 std::string GetPathParamsQuery(....) { std::string path; .... } 

स्ट्रिंग घोषित है, लेकिन आगे उपयोग नहीं किया गया है। कुछ मामलों में, अप्रयुक्त चर एक त्रुटि का संकेत दे सकते हैं। इस मामले में, ऐसा लगता है कि यह चर किसी तरह उपयोग किया गया था, लेकिन परिवर्तन करने के बाद यह अनावश्यक हो गया। इस प्रकार, विश्लेषक अक्सर कोड क्लीनर बनाने में मदद करता है और अपनी उपस्थिति के लिए केवल आवश्यक शर्तें हटाकर त्रुटियों से बचने में मदद करता है।

अगले मामले में, विश्लेषक पूरे मुख्य निष्पादित होने के बाद डिफ़ॉल्ट रिटर्न जोड़ने की सिफारिश करता है। शायद यह समझने के लिए कि सब कुछ वास्तव में काम कर चुका है, बहुत अंत में रिटर्न स्टेटमेंट जोड़ने लायक है। हालांकि, अगर इस तरह के व्यवहार का इरादा था, तो कुछ भी बदलने की जरूरत नहीं है। यदि आप इस चेतावनी को नहीं देखना चाहते हैं, तो पीवीएस-स्टूडियो में आप इसे दबा सकते हैं और इसे फिर कभी नहीं देख सकते :)।

V591 'मुख्य' फ़ंक्शन एक मान नहीं लौटाता है, जो 'रिटर्न 0' के बराबर है। यह संभव है कि यह एक अनपेक्षित व्यवहार है। 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; } } 

मैंने यह भी पाया कि नीचे दिए गए दो कार्यों को अलग-अलग नामों से उसी तरह लागू किया गया था। शायद यह इस तथ्य का परिणाम है कि पहले इन कार्यों में अलग-अलग तर्क थे, लेकिन एक के लिए आया था। यह हो सकता है कि कहीं एक टाइपो क्रेप हो, इसलिए ऐसी चेतावनियों को सावधानी से जांचना चाहिए।

V524 यह विचित्र है कि 'MatchDisallow' फ़ंक्शन का शरीर '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; } 

यह एकमात्र ऐसी जगह है जिस पर मुझे संदेह है। इसे परियोजना के लेखकों द्वारा जांचा जाना चाहिए।

इस प्रकार, Google से robots.txt पार्सर की जांच से पता चला कि यह परियोजना, जिसे कई बार जांचा जा चुका है और व्यापक रूप से उपयोग किया जाता है, महान गुणवत्ता की है। यहां तक ​​कि कुछ मिली खामियां इस परियोजना को लिखने वाले शांत Google कोडर्स की छाप को खराब नहीं कर सकतीं :)।

हम सुझाव देते हैं कि आप जिस प्रोजेक्ट में रुचि रखते हैं, उस पर पीवीएस-स्टूडियो डाउनलोड करें और प्रयास करें

Source: https://habr.com/ru/post/hi459658/


All Articles