Izšla je nova različica statičnega analizadorja kode cppcheck 2.6, ki omogoča odkrivanje različnih vrst napak v kodi v jezikih C in C++, tudi pri uporabi nestandardne sintakse, tipične za vgrajene sisteme. Na voljo je zbirka vtičnikov, prek katerih je omogočena integracija cppcheck z različnimi razvojnimi sistemi, sistemi nenehne integracije in testiranja, prav tako pa so na voljo takšne možnosti, kot je preverjanje skladnosti kode s stilom oblikovanja kode. Za razčlenitev kode se lahko uporablja tako lastni parser kot zunanji parser od Clang. V njem je tudi skript donate-cpu.py za zagotavljanje lokalnih virov za izvedbo skupne analize kode paketov Debian. Izvorne kode projekta se distribuirajo pod licenco GPLv3.
Razvoj cppchecka je osredotočen na odkrivanje težav, povezanih z nedoločenim vedenjem in uporabo konstrukcij, ki so nevarne z vidika varnosti. Cilj je tudi minimizacija lažnih opozoril. Med odkritimi težavami so: kazalci na neobstoječe objekte, delitev z nič, celoštevilski preliv, nepravilne operacije bitnega premika, nepravilne pretvorbe, težave pri ravnanju z pomnilnikom, nepravilna uporaba STL, dereferenciranje ničelnih kazalcev, uporaba preverjanj po dejanskem dostopu do pomnilnika, izhod iz meja pomnilnikov, uporaba neinicijaliziranih spremenljivk.
V novi različici:
- V jedro analizadorja so dodane naslednje preveritve:
- manjkanje operatorja return v telesu funkcije;
- zapis prekrivajočih se podatkov, ugotavljanje nedoločenega vedenja;
- primerjalna vrednost je izven reprezentacije vrednosti tipa;
- optimizacija kopiranja se ne uporablja za return std::move(local);
- datoteka ne more biti odprta hkrati za branje in pisanje v različnih tokovih;
- za Unix platforme je bila dodana podpora za izhod diagnostičnih sporočil v različnih barvah;
- dodana je bila simbolna analiza za ValueFlow. Uporablja se preprosta delta pri izračunu razlik med dvema neznanima spremenljivkama;
- pravila, uporabljena za seznam tokenov „define“, lahko ustrezajo tudi #include;
- Knjižnični tag zdaj lahko vsebuje tag , kar pomeni, da lahko funkcije free, ki sprejemajo takšne kontejnere, kot so std::size, std::empty, std::begin, std::end itd., označijo yeld ali action za kontejnere;
- Knjižnični tag zdaj lahko vsebuje tag za pametne kazalce, ki imajo edinstveno lastništvo (unique ownership). Zdaj se izda opozorilo o 'visečih' sklicih na tovrstne pametne kazalce;
- Odpravljene so bile težave z obdelavo parametra —cppcheck-build-dir;
- htmlreport zdaj lahko izpiše informacije o avtorju (s pomočjo git blame);
- Razširjena je bila izdaja opozoril o spremenljivkah, ki niso konstantne, vendar bi lahko bile;
- Odpravljene so bile nabrané napake in nedodelane funkcionalnosti analizatorja.
Dodatno so bile v celoti izvedene preverbe iz Misra C 2012, vključno s propisom 1 in propisom 2, razen pravil 1.1, 1.2 in 17.3. Preverbi 1.1 in 1.2 morata izvajati prevajalnik. Preverbo 17.3 lahko izvaja prevajalnik, na primer GCC.
Izvor: opennet.ru
