Objavljena je nova verzija statičkog analizatora koda cppcheck 2.6, koja omogućava otkrivanje raznih klasa grešaka u kodu na jezicima C i C++, uključujući i upotrebu nestandardne sintakse koja je karakteristična za ugrađene sisteme. Pruža se kolekcija dodataka preko kojih je omogućena integracija cppcheck-a s raznim razvojnim sistemima, kontinuiranom integracijom i testiranjem, kao i mogućnosti kao što je provjera usklađenosti koda sa stilom formatiranja koda. Za analizu koda može se koristiti vlastiti parser ili vanjski parser od Clanga. U paket je uključen i skript donate-cpu.py za pružanje lokalnih resursa za izvršavanje zajedničkog provjeravanja koda Debian paketa. Izvorni kodovi projekta distribuiraju se pod licenci GPLv3.
Razvoj cppcheck-a fokusiran je na otkrivanje problema povezanih s neodređenim ponašanjem i upotrebom konstrukcija koje su opasne s aspekta sigurnosti. Cilj je također minimizirati lažne alarma. Među otkrivenim problemima su: pokazivači na nepostojeće objekte, dijeljenje s nulom, cjelobrojno prelivanje, nepravilne operacije bitnog pomaka, nepravilne konverzije, problemi s memorijom, nepravilna upotreba STL-a, dereferenciranje nultih pokazivača, korištenje provjera nakon stvarnog pristupa baferu, izlazak iz granica bafera, korištenje neinicijaliziranih varijabli.
U novoj verziji:
- U jezgru analizatora dodane su sljedeće provjere:
- nedostatak return operatora u tijelu funkcije;
- prepisivanje preklapajućih podataka, određivanje neodređenog ponašanja;
- vrijednost koja se uspoređuje nalazi se izvan opsega predstavljanja vrijednosti tipa;
- optimizacija kopiranja se ne primjenjuje za return std::move(local);
- datoteka ne može biti otvorena istovremeno za čitanje i pisanje u različitim tokovima;
- za Unix platforme dodana je podrška za ispis dijagnostičkih poruka u raznim bojama;
- dodana je simbolička analiza za ValueFlow. Koristi se jednostavna delta pri izračunavanju razlika između dvije nepoznate varijable;
- pravila korištena za listu tokena «define» također mogu odgovarati i #include;
- Bibliotečki oznak sada može sadržavati oznak , a prema tome funkcije free, koje mogu primati takve kontejnere kao std::size, std::empty, std::begin, std::end itd. mogu ukazivati na yeld ili action za kontejnere;
- Bibliotečki oznak sada može sadržavati oznak za pametne pokazivače koji imaju jedinstveno vlasništvo (unique ownership). Sada se izdaje upozorenje o "visećim" referencama na takve pametne pokazivače;
- Ispravljeni problemi s obradom parametra —cppcheck-build-dir;
- htmlreport sada može ispisivati informacije o autoru (putem git blame);
- Proširena su upozorenja o varijablama koje nisu konstante, ali bi mogle biti;
- Ispravljene su nagomilane greške i nedostaci analizatora.
Dodatno su potpuno implementirane provjere iz Misra C 2012, uključujući Amendment 1 i Amendment 2, osim pravila 1.1, 1.2 i 17.3. Provjere 1.1 i 1.2 moraju izvoditi kompajler. Provjeru 17.3 može izvoditi kompajler, na primjer GCC.
Izvor: opennet.ru
