Megjelent a cppcheck 2.6 verziója, amely egy statikus kódanalizáló, és képes különböző hibaosztályokat kimutatni C és C++ nyelveken, beleértve a beágyazott rendszerekre jellemző nem szabványos szintaxist is. Kínál egy plugin gyűjteményt, amelyen keresztül integrálható a cppcheck különböző fejlesztési, folyamatos integrációs és tesztelési rendszerekbe, valamint lehetőségeket biztosít a kód stíluskövetelményekhez való illeszkedésének ellenőrzésére. A kód elemzésére használható saját parser, illetve a Clang külső parsera is. Tartalmaz egy donate-cpu.py szkriptet, amely helyi erőforrások nyújtására szolgál a Debian csomagok közös kódellenőrzéséhez. A projekt forráskódja GPLv3 licenc alatt érhető el.
A cppcheck fejlesztése a bizonytalan viselkedésből és a biztonsági szempontból veszélyes konstrukciók alkalmazásából eredő problémák azonosítására összpontosít. Célja a hamis riasztások minimalizálása is. Az észlelt problémák között szerepelnek: nem létező objektumokra mutató mutatók, nullával való osztás, egész számok túlcsordulása, hibás biteltolási műveletek, helytelen átalakítások, memóriahasználati problémák, a STL helytelen használata, null mutatók dereferálása, ellenőrzések végrehajtása a puffer tényleges elérése után, pufferhatárok túllépése, inicializálatlan változók használata.
Az új verzióban:
- Az elemző magjába a következő ellenőrzések kerültek bevezetésre:
- return operátor hiánya a függvény törzsében;
- átfedő adatok írása, határozatlan viselkedés megállapítása;
- az összehasonlított érték a típus értékeinek határain kívül található;
- a másolás optimalizálása nem alkalmazható a return std::move(local); esetén;
- fájl egyidejű megnyitása olvasásra és írásra különböző szálakban (stream) nem lehetséges;
- Unix platformokhoz hozzáadva különböző színekkel kimeneti diagnosztikai üzenetek támogatása;
- hozzáadva a szimbolikus elemzés a ValueFlow számára. Egyszerű delta használata a két ismeretlen változó közötti különbségek kiszámításakor;
- a „define” tokenlista használatára vonatkozó szabályok az #include számára is alkalmazhatók;
- A könyvtári címke most már tartalmazhat címkét, és ennek megfelelően a free függvények, amelyek ilyen tartályokat, mint a std::size, std::empty, std::begin, std::end stb. fogadhatnak el, yeld vagy action-t jelölhetnek meg a tartályok számára;
- A könyvtári címke most már tartalmazhat címkét az okos mutatók számára, amelyek egyedi tulajdonlással rendelkeznek (unique ownership). Figyelmeztetés érkezik az ilyen típusú okos mutatókra való „lógó” hivatkozásokról;
- Javítva lettek a —cppcheck-build-dir paraméter kezelésével kapcsolatos problémák;
- Az htmlreport most képes megjeleníteni a szerző információját (git blame segítségével);
- Kiterjesztették a figyelmeztetések kibocsátását az olyan változókra, amelyek nem állandók, de azok lehettek volna;
- Javították a felhalmozódott hibákat és hiányosságokat az elemzőben.
Továbbiakban teljesen megvalósították a Misra C 2012 ellenőrzéseit, beleértve az 1. és 2. módosítást, kivéve az 1.1, 1.2 és 17.3 szabályokat. Az 1.1 és 1.2 ellenőrzéseket a fordítónak kell végrehajtania. A 17.3 ellenőrzést például a GCC fordítója is elvégezheti.
Forrás: opennet.ru
