Utgivelse av cppcheck 2.6, en statisk kodeanalysator for C++ og C-språk

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

Legg til en kommentar