Vydání cppcheck 2.6, statického analyzátoru kódu pro jazyky C++ a C

Byla vydána nová verze statického analyzátoru kódu cppcheck 2.6, která umožňuje identifikovat různé třídy chyb v kódu v jazycích C a C++, včetně použití nestandardní syntaxe typické pro vestavěné systémy. Je poskytována kolekce zásuvných modulů, jejichž prostřednictvím je cppcheck integrován s různými vývojovými, průběžnými integračními a testovacími systémy a také poskytuje takové funkce, jako je kontrola souladu kódu se stylem kódu. K analýze kódu můžete použít buď svůj vlastní parser, nebo externí parser od Clang. Zahrnuje také skript donate-cpu.py, který poskytuje místní zdroje pro práci na společné kontrole kódu pro balíčky Debianu. Zdrojový kód projektu je šířen pod licencí GPLv3.

Vývoj cppcheck je zaměřen na identifikaci problémů spojených s nedefinovaným chováním a používáním návrhů, které jsou z bezpečnostního hlediska nebezpečné. Cílem je také minimalizovat falešné poplachy. Mezi identifikované problémy: ukazatele na neexistující objekty, dělení nulou, přetečení celých čísel, nesprávné operace bitového posunu, nesprávné převody, problémy při práci s pamětí, nesprávné použití STL, dereference nulového ukazatele, použití kontrol po skutečném přístupu do vyrovnávací paměti, přetečení vyrovnávací paměti, použití neinicializovaných proměnných.

V nové verzi:

  • Do jádra analyzátoru byly přidány následující kontroly:
    • nepřítomnost návratového operátoru v těle funkce;
    • zaznamenává překrývající se data, určuje nedefinované chování;
    • porovnávaná hodnota je mimo hodnotovou reprezentaci typu;
    • optimalizace kopírování se nevztahuje na return std::move(local);
    • soubor nelze otevřít současně pro čtení a zápis v různých proudech (stream);
  • pro platformy Unix přidána podpora pro zobrazování diagnostických zpráv v různých barvách;
  • přidána symbolická analýza pro ValueFlow. Při výpočtu rozdílu mezi dvěma neznámými proměnnými používá jednoduchou deltu;
  • pravidla použitá pro seznam tokenů "define" mohou také odpovídat #include;
  • tag knihovny nyní může obsahovat značku a podle toho i bezplatné funkce, které mohou přijímat kontejnery jako std::size, std::empty, std::begin, std::end atd. může specifikovat Yeld nebo akci pro konektory;
  • tag knihovny nyní může obsahovat značku pro inteligentní ukazatele, které mají jedinečné vlastnictví. Nyní je vydáno varování před visícími odkazy na tyto typy inteligentních ukazatelů;
  • opraveny problémy se zpracováním parametru —cppcheck-build-dir;
  • htmlreport nyní může zobrazovat informace o autorovi (pomocí git viníka);
  • rozšířená upozornění na proměnné, které nejsou konstantní, ale mohly by být;
  • Nahromaděné chyby a nedostatky analyzátoru byly opraveny.

Kromě toho byly plně provedeny kontroly z Misra C 2012, včetně změn 1 a 2, s výjimkou pravidel 1.1, 1.2 a 17.3. Kontroly 1.1 a 1.2 musí provést kompilátor. Ověření 17.3 může být provedeno kompilátorem, jako je GCC.

Zdroj: opennet.ru

Přidat komentář