أراد 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 لمعرفة ما إذا كانت السلسلة فارغة. يمكن أن يكون هذا الفحص أكثر بساطة: if (* 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 في المشروع الذي تهتم به.

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


All Articles