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
