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

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

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster