Випуск cppcheck 2.6 статичного аналізатора коду для мов C++ і С

Вийшла нова версія статичного аналізатора коду cppcheck 2.6, що дозволяє виявляти різні класи помилок у коді мовами Сі та Сі++, у тому числі при використанні нестандартного синтаксису, типового для систем, що вбудовуються. Надається колекція плагінів, через які забезпечено інтеграцію cppcheck з різними системами розробки, безперервної інтеграції та тестування, а також надано такі можливості як перевірка відповідності коду стилю оформлення коду. Для аналізу коду може застосовуватися як власний парсер, так і зовнішній парсер від Clang. До складу також входить скрипт donate-cpu.py для надання локальних ресурсів для виконання роботи щодо спільної перевірки коду пакетів Debian. Вихідні тексти проекту розповсюджуються під ліцензією GPLv3.

Розвиток cppcheck зосереджено на виявленні проблем, пов'язаних із невизначеною поведінкою та застосуванням конструкцій, небезпечних з погляду безпеки. Метою також є мінімізація хибних спрацьовувань. Серед проблем, що виявляються: покажчики на неіснуючі об'єкти, поділи на нуль, цілочисленні переповнення, некоректні операції бітового зсуву, некоректні перетворення, проблеми при роботі з пам'яттю, некоректне використання STL, розіменування нульових покажчиків, застосування перевірок після фактичного звернення до буфера, вихід за межі буферів використання неініціалізованих змінних.

В новой версії:

  • У ядро ​​аналізатора додано такі перевірки:
    • відсутність оператора return у тілі функції;
    • записи даних, що перекриваються, визначення невизначеної поведінки;
    • порівнюване значення перебуває поза уявлення значень типу;
    • оптимізація копіювання не використовується для 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

Додати коментар або відгук