Излезе новата версия на статичния анализатор на код 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
