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