أراد برنامج PVS-Studio ، ولكن تعذر العثور على الأخطاء في ملف robots.txt

الصورة 1

في اليوم الآخر ، نشرت Google الكود المصدري لمحلل robots.txt. لماذا لا تقوم بتشغيل المشروع الذي تم اختباره بالفعل صعودًا وهبوطًا بواسطة PVS-Studio وربما تجد خطأً. لم يقل قال من القيام به. إنه لأمر مؤسف أنه لا يوجد شيء مهم يمكن العثور عليه. حسنًا ، فليكن مجرد ذريعة للثناء على مطوري Google.

ملف robots.txt - ملف فهرس يحتوي على قواعد للبحث عن برامج الروبوت. إنه صالح لبروتوكولات https و http و ftp. جعلت Google من محلل ملفات robots.txt متاحًا للجميع. اقرأ المزيد حول هذا الخبر هنا: تفتح Google الشفرة المصدرية لمحلل robots.txt

أعتقد أن معظم قراء مقالاتنا يعرفون ما يفعله PVS-Studio. ولكن إذا كنت جديدًا على مدونتنا ، فسنقدم مرجعًا موجزًا. PVS-Studio هو محلل ثابت للكود يسمح لك بالعثور على مجموعة متنوعة من الأخطاء ونقاط الضعف وأوجه القصور في المشروعات المكتوبة بلغات C و C ++ و C # و Java. بمعنى آخر ، يعد PVS-Studio حلاً SAST ويمكنه العمل على أجهزة المستخدمين أو بناء الخوادم ، وفي السحابة . يحب فريق PVS-Studio كتابة مقالات حول التحقق من المشروعات المختلفة. لذلك دعونا نبدأ العمل ونحاول العثور على أخطاء في شفرة مصدر المحلل اللغوي من Google.

للأسف ، ولم يسعدنا العثور على أي أخطاء. تم العثور على اثنين فقط من العيوب الطفيفة ، والتي سوف نتحدث عنها. عليك أن تكتب ما لا يقل عن شيء :). يتم تفسير عدم وجود أخطاء من خلال الحجم الصغير للمشروع والجودة العالية للرمز نفسه. هذا لا يعني أن بعض الأخطاء لا تختبئ هناك ، لكن التحليل الثابت تبين أنه عاجز في الوقت الحالي.

بشكل عام ، ظهر هذا المقال بروح منشورنا الآخر ، " أقصر مقال حول التحقق من nginx ".

كان هناك احتمال التحسين الصغيرة:

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; } 

استدعاء دالة strlen لمعرفة ما إذا كانت السلسلة غير فارغة هي طريقة غير فعالة. يمكن جعل عملية التحقق هذه أكثر بساطة: إذا كان (* key [0]! = '\ 0') ، فلن تحتاج إلى استعراض جميع عناصر السلسلة إذا لم تكن فارغة.

تم إنشاء كائن V808 'path' من النوع 'basic_string' ولكن لم يتم استخدامه. robots.cc 123

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

يتم الإعلان عن سلسلة المسار ، ولكن لا يتم استخدامها بشكل أكبر. في بعض الحالات ، قد تشير المتغيرات غير المستخدمة إلى حدوث خطأ. ولكن يبدو هنا أن هذا المتغير كان يستخدم سابقًا بطريقة ما ، ولكن بعد إجراء التغييرات لم تعد هناك حاجة إليه. وبالتالي ، غالباً ما يساعد المحلل أيضًا في جعل رمز الكود أكثر نظافة ويساعد على تجنب الأخطاء عن طريق إزالة المتطلبات المسبقة لمظهرها.

في الحالة التالية ، يقدم المحلل ، في جوهره ، توصية لإضافة عائد افتراضي بعد أن تتم معالجة جميع العناصر الرئيسية . قد يكون من المفيد إضافة عائد في النهاية حتى تتمكن من فهم أن كل شيء ناجح حقًا. ومع ذلك ، إذا تم التخطيط لهذا السلوك ولم يتم تغيير أي شيء ، ولا أريد أن أرى رسالة المحلل ، فيمكنك في حالة PVS-Studio منع هذا التحذير وعدم رؤيته مرة أخرى :).

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; } 

هذا هو المكان الوحيد الذي يجعلني مشبوهة. يجب التحقق من ذلك من قبل واضعي المشروع.

وبالتالي ، أثبت التحقق من محلل ملف robots.txt من Google أن أحد المشاريع المستخدمة بنشاط للغاية ، وعلى الأرجح يتم التحقق منه بشكل متكرر بحثًا عن أخطاء ، يحتوي على كود عالي الجودة. وأوجه القصور التي عثر عليها لا يمكن أن تفسد على الإطلاق الانطباع حول ما شاركه المبرمجون من Google في هذا المشروع :).

نقدم لك تنزيل وتجربة PVS-Studio على المشروع الذي تهتم به.



إذا كنت ترغب في مشاركة هذا المقال مع جمهور ناطق باللغة الإنجليزية ، فيرجى استخدام الرابط الخاص بالترجمة: Victoria Khanieva. أراد PVS-Studio ولكن تعذر العثور على الأخطاء في ملف robots.txt

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


All Articles