Izdanje cppcheck 2.6, statičkog analizatora koda za C++ i C jezike

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

Dodajte komentar