Издаване на cppcheck 2.6, статичен анализатор на код за C++ и C

Излезе новата версия на статичния анализатор на код cppcheck 2.6, който позволява откриването на различни класове грешки в код на езиците C и C++, включително при използване на нестандартен синтаксис, характерен за вградени системи. Предоставя се колекция от плъгини, чрез които се осигурява интеграцията на cppcheck с различни системи за разработка, непрекъсната интеграция и тестване, както и възможности като проверка на съответствието на кода с кода за стил. За парсиране на кода може да се използва както собствен парсер, така и външен парсер от Clang. Включен е също скрипт donate-cpu.py за предоставяне на локални ресурси за съвместна проверка на кода на Debian пакети. Изходните текстове на проекта се разпространяват под лицензия GPLv3.

Развитието на cppcheck е насочено към идентифициране на проблеми, свързани с неопределено поведение и използването на конструкции, опасни от гледна точка на сигурността. Целта е също така минимизиране на фалшивите срабатывания. Сред откритите проблеми: указатели към не съществуващи обекти, деления на нула, презареждания на цялочислени стойности, некоректни операции с битови сдвижения, неправилни преобразования, проблеми при работа с паметта, неправилна употреба на STL, разименуване на нулеви указатели, извършване на проверки след действителен достъп до буфера, излизане извън границите на буферите, използване на неинициализирани променливи.

В новата версия:

  • В ядрото на анализатора са добавени следните проверки:
    • липса на оператор за връщане в тялото на функцията;
    • запис на припокриващи се данни, определяне на неопределено поведение;
    • сравняваната стойност е извън обхвата на представените стойности на типа;
    • оптимизацията на копиране не се прилага за return std::move(local);
    • файлът не може да бъде отворен едновременно за четене и запис в различни потоци (stream);
  • за Unix платформи е добавена поддръжка на изходни диагностични съобщения с различни цветове;
  • добавен е символнен анализ за ValueFlow. Използва се проста делта при изчисляването на разликите между две неизвестни променливи;
  • правилата, използвани за списъка от токени «define», също могат да отговарят и на #include;
  • Библиотечният тег вече може да съдържа таг , и съответно функциите free, които могат да приемат такива контейнери като std::size, std::empty, std::begin, std::end и т.н., могат да указват yeld или action за контейнерите;
  • Библиотечният тег вече може да съдържа таг за умни указатели, които имат изключително притежание (unique ownership). Сега се издава предупреждение за "висящи" референции към такива умни указатели;
  • Поправени са проблемите с обработката на параметъра —cppcheck-build-dir;
  • htmlreport вече може да изведе информация за автора (чрез git blame);
  • Разширено е предупреждението за променливи, които не са константни, но биха могли да бъдат;
  • Поправени са натрупаните грешки и недостатъци на анализатора.

Допълнително са реализирани проверки от Misra C 2012, включително Amendment 1 и Amendment 2, с изключение на правила 1.1, 1.2 и 17.3. Проверки 1.1 и 1.2 трябва да се изпълняват от компилатора. Проверка 17.3 може да се изпълнява от компилатора, например GCC.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster