Objavljena je nova verzija statičkog analizatora koda cppcheck 2.6, koja vam omogućava da identifikujete različite klase grešaka u kodu u jezicima C i C++, uključujući i upotrebu nestandardne sintakse, tipične za ugrađene sisteme. Obezbeđena je kolekcija dodataka preko kojih je cppcheck integrisan sa različitim sistemima za razvoj, kontinuiranu integraciju i testiranje, a takođe pruža funkcije kao što je provera usklađenosti koda sa stilom koda. Za raščlanjivanje koda možete koristiti ili vlastiti parser ili vanjski parser iz Clanga. Također uključuje donate-cpu.py skriptu za pružanje lokalnih resursa za obavljanje kolaborativnog pregleda koda za Debian pakete. Izvorni kod projekta se distribuira pod GPLv3 licencom.
Razvoj cppcheck-a je fokusiran na identifikaciju problema povezanih s nedefiniranim ponašanjem i korištenjem dizajna koji su opasni sa sigurnosne točke gledišta. Cilj je i minimiziranje lažnih pozitivnih rezultata. Među identifikovanim problemima: pokazivači na nepostojeće objekte, dijeljenja nulom, prekoračenja cijelih brojeva, pogrešne operacije pomaka bita, pogrešne konverzije, problemi pri radu s memorijom, nepravilna upotreba STL-a, null pokazivača dereferenciranja, korištenje provjera nakon stvarnog pristupa u bafer, prekoračenje bafera, korištenje neinicijaliziranih varijabli.
U novoj verziji:
- Sljedeće provjere su dodane u jezgru analizatora:
- odsustvo operatora povratka u tijelu funkcije;
- bilježi podatke koji se preklapaju, utvrđuje nedefinirano ponašanje;
- vrijednost koja se poredi je izvan vrijednosti reprezentacije tipa;
- optimizacija kopiranja se ne odnosi na return std::move(local);
- datoteka se ne može istovremeno otvoriti za čitanje i pisanje u različitim tokovima (stream);
- za Unix platforme, dodata podrška za prikazivanje dijagnostičkih poruka u različitim bojama;
- dodana simbolička analiza za ValueFlow. Koristi jednostavnu deltu kada izračunava razliku između dvije nepoznate varijable;
- pravila koja se koriste za listu tokena "define" također mogu odgovarati #include;
- bibliotečka oznaka sada može sadržavati oznaku , a shodno tome i besplatne funkcije, koje mogu prihvatiti kontejnere kao što su std::size, std::empty, std::begin, std::end, itd. može specificirati yeld ili akciju za konektore;
- bibliotečka oznaka sada može sadržavati oznaku za pametne pokazivače koji imaju jedinstveno vlasništvo. Sada se izdaje upozorenje o visećim referencama na ove vrste pametnih pokazivača;
- popravljeni problemi sa obradom parametra —cppcheck-build-dir;
- htmlreport sada može prikazati informacije o autoru (koristeći git blame);
- proširena upozorenja o varijablama koje nisu konstantne, ali bi mogle biti;
- Nagomilane greške i nedostaci analizatora su ispravljeni.
Osim toga, provjere iz Misra C 2012, uključujući Amandman 1 i Amandman 2, su u potpunosti implementirane, osim pravila 1.1, 1.2 i 17.3. Provjere 1.1 i 1.2 mora izvršiti kompajler. Verifikaciju 17.3 može izvesti kompajler kao što je GCC.
izvor: opennet.ru