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 odhalovat různé typy chyb v kódu v jazycích C a C++, včetně použití nestandardní syntaxe typické pro vestavěné systémy. Je poskytnuta kolekce pluginů, která zajišťuje integraci cppcheck s různými vývojovými, kontinuálními integračními a testovacími systémy, a také nabízí možnosti, jako je kontrola souladu kódu s kódovacím stylem. Pro analýzu kódu může být použit jak vlastní parser, tak externí parser od Clang. Součástí je také skript donate-cpu.py pro poskytování lokálních zdrojů k provedení společného ověřování kódu balíčků Debian. Zdrojové kódy projektu jsou šířeny pod licencí GPLv3.

Rozvoj cppcheck je zaměřen na odhalování problémů souvisejících s neurčitým chováním a použitím konstrukcí, které jsou bezpečnostně rizikové. Cílem je také minimalizace falešných pozitiv. Mezi zjištěné problémy patří: ukazatele na neexistující objekty, dělení nulou, přetečení celých čísel, nekorektní operace s bitovým posunem, nekorektní konverze, problémy s pamětí, nesprávné používání STL, dereferencování nulových ukazatelů, provádění kontrol po skutečném přístupu k buffero, překročení hranic bufferů, použití neinicializovaných proměnných.

V nové verzi:

  • Do jádra analyzátoru byly přidány následující kontroly:
    • absence operátoru return v těle funkce;
    • přepisující se data, určení neurčitého chování;
    • srovnávaná hodnota je mimo rozsah reprezentace typu;
    • optimalizace kopírování není aplikována pro return std::move(local);
    • soubor nemůže být současně otevřen pro čtení a zápis v různých stream; na platformách Unix byla přidána podpora pro výstup diagnostických zpráv v různých barvách;
  • byla přidána podpora pro výstup diagnostických zpráv v různých barvách;
  • byla přidána symbolická analýza pro ValueFlow. Používá se jednoduchá delta při výpočtu rozdílů mezi dvěma neznámými proměnnými;
  • pravidla používaná pro seznam tokenů „define“ mohou také odpovídat a #include;
  • Knihovní tag nyní může obsahovat tag , a odpovídajícím způsobem funkce free, které mohou přijímat takové kontejnery jako std::size, std::empty, std::begin, std::end atd., mohou indikovat yield nebo action pro kontejnery;
  • Knihovní tag nyní může obsahovat tag pro inteligentní ukazatele, které mají výlučné vlastnictví (unique ownership). Nyní se zobrazí varování o „visících“ odkazech na takové inteligentní ukazatele;
  • Opraveny problémy s zpracováním parametru —cppcheck-build-dir;
  • htmlreport nyní může zobrazovat informace o autorovi (pomocí git blame);
  • Byla rozšířena výstupní varování o proměnných, které nejsou konstantní, ale mohly by být;
  • Opraveny nahromaděné chyby a nedodělky analyzátoru.

Navíc byly kompletně implementovány kontroly z Misra C 2012, včetně dodatku 1 a dodatku 2, kromě pravidel 1.1, 1.2 a 17.3. Kontroly 1.1 a 1.2 by měly být prováděny kompilátorem. Kontrolu 17.3 může provádět kompilátor, například GCC.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster