Выпуск 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 and 17.3. Праверкі 1.1 і 1.2 павінны выконвацца кампілятарам. Праверка 17.3/XNUMX можа выконваць кампілятарам, напрыклад GCC.

Крыніца: opennet.ru

Дадаць каментар