En ny versjon av den statiske kodeanalysatoren cppcheck 2.6 har blitt utgitt, som lar deg identifisere ulike klasser av feil i kode i C- og C++-språkene, inkludert når du bruker ikke-standard syntaks, typisk for innebygde systemer. En samling av plugins er gitt der cppcheck er integrert med ulike utviklings-, kontinuerlige integrasjons- og testsystemer, og gir også funksjoner som å sjekke kodekompatibilitet med kodestilen. For å analysere kode kan du bruke enten din egen parser eller en ekstern parser fra Clang. Det inkluderer også donate-cpu.py-skriptet for å gi lokale ressurser for å utføre samarbeidende kodegjennomgang for Debian-pakker. Kildekoden til prosjektet distribueres under GPLv3-lisensen.
Utviklingen av cppcheck er fokusert på å identifisere problemer knyttet til udefinert atferd og bruk av design som er farlige fra et sikkerhetssynspunkt. Målet er også å minimere falske positiver. Blant de identifiserte problemene: pekere til ikke-eksisterende objekter, deling med null, heltallsoverløp, feil bitskiftoperasjoner, feil konverteringer, problemer ved arbeid med minne, feil bruk av STL, null-peker-dereferanser, bruk av sjekker etter den faktiske tilgangen til bufferen, bufferoverskridelser, bruk av uinitialiserte variabler.
I den nye versjonen:
- Følgende kontroller er lagt til analysatorkjernen:
- fravær av en returoperatør i funksjonsorganet;
- registrerer overlappende data, bestemmer udefinert oppførsel;
- verdien som sammenlignes er utenfor verdirepresentasjonen til typen;
- kopioptimalisering gjelder ikke for retur std::move(local);
- filen kan ikke åpnes samtidig for lesing og skriving i forskjellige strømmer (stream);
- for Unix-plattformer, lagt til støtte for visning av diagnostiske meldinger i forskjellige farger;
- lagt til symbolsk analyse for ValueFlow. Bruker enkelt delta ved beregning av differansen mellom to ukjente variabler;
- reglene som brukes for listen over tokens "define" kan også samsvare med #include;
- bibliotek tag kan nå inneholde en tag , og følgelig gratisfunksjonene, som kan akseptere beholdere som std::size, std::empty, std::begin, std::end, etc. kan spesifisere kapasitet eller handling for koblinger;
- bibliotek tag kan nå inneholde en tag for smarte pekere som har unikt eierskap. Det sendes nå ut en advarsel om dinglende referanser til denne typen smartpekere;
- fikset problemer med å behandle —cppcheck-build-dir-parameteren;
- htmlreport kan nå vise informasjon om forfatteren (ved hjelp av git blame);
- utvidede advarsler om variabler som ikke er konstante, men som kan være det;
- De akkumulerte feilene og mangler ved analysatoren er rettet.
I tillegg er sjekkene fra Misra C 2012, inkludert Amendment 1 og Amendment 2, fullstendig implementert, bortsett fra reglene 1.1, 1.2 og 17.3. Kontroller 1.1 og 1.2 må utføres av kompilatoren. Verifikasjon 17.3 kan utføres av en kompilator som GCC.
Kilde: opennet.ru