Objavljena je nova verzija statičkog analizatora koda cppcheck 2.6, koja vam omogućuje prepoznavanje različitih klasa pogrešaka u kodu u jezicima C i C++, uključujući korištenje nestandardne sintakse, tipične za ugrađene sustave. Omogućena je kolekcija dodataka putem kojih se cppcheck integrira s različitim sustavima za razvoj, kontinuiranu integraciju i testiranje, a također pruža značajke kao što je provjera usklađenosti koda sa stilom koda. Za raščlanjivanje koda možete koristiti ili vlastiti raščlanjivač ili vanjski raščlanjivač tvrtke Clang. Također uključuje skriptu donate-cpu.py za pružanje lokalnih resursa za zajednički pregled koda za Debian pakete. Izvorni kod projekta distribuira se pod licencom GPLv3.
Razvoj cppchecka usmjeren je na prepoznavanje problema povezanih s nedefiniranim ponašanjem i korištenjem dizajna koji su opasni sa sigurnosne točke gledišta. Cilj je također minimizirati lažne pozitivne rezultate. Među identificiranim problemima: pokazivači na nepostojeće objekte, dijeljenja s nulom, prekoračenja cijelih brojeva, netočne operacije pomaka bitova, netočne konverzije, problemi pri radu s memorijom, netočna upotreba STL-a, dereferencije nultog pokazivača, korištenje provjera nakon stvarnog pristupa međuspremniku, prekoračenja međuspremnika, korištenje neinicijaliziranih varijabli.
U novoj verziji:
- Sljedeće provjere dodane su jezgri analizatora:
- nepostojanje operatora return u tijelu funkcije;
- bilježi podatke koji se preklapaju, utvrđuje nedefinirano ponašanje;
- vrijednost koja se uspoređuje je izvan prikaza vrijednosti tipa;
- optimizacija kopiranja ne primjenjuje se na return std::move(local);
- datoteka se ne može otvoriti istovremeno za čitanje i pisanje u različitim tokovima (stream);
- za Unix platforme, dodana podrška za prikaz dijagnostičkih poruka u različitim bojama;
- dodana simbolička analiza za ValueFlow. Koristi jednostavnu delta pri izračunavanju razlike između dvije nepoznate varijable;
- pravila koja se koriste za popis tokena "define" također mogu odgovarati #include;
- oznaka knjižnice sada može sadržavati oznaku , i sukladno tome besplatne funkcije, koje mogu prihvatiti spremnike kao što su std::size, std::empty, std::begin, std::end, itd. može odrediti yeld ili akciju za konektore;
- oznaka knjižnice 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;
- riješeni problemi s 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.
Nadalje, provjere iz Misra C 2012, uključujući dopunu 1 i dopunu 2, u potpunosti su implementirane, osim pravila 1.1, 1.2 i 17.3. Provjere 1.1 i 1.2 mora izvršiti prevodilac. Provjeru 17.3 može izvesti kompilator kao što je GCC.
Izvor: opennet.ru