De release van cppcheck 2.6, een statische code-analyzer voor de talen C++ en C

De nieuwe versie van de statische code-analyse tool cppcheck 2.6 is uitgebracht. Deze tool maakt het mogelijk om verschillende soorten fouten in C en C++ code te identificeren, zelfs bij het gebruik van niet-standaard syntaxis die typisch is voor embedded systemen. Er is een collectie plugins beschikbaar die de integratie van cppcheck met verschillende ontwikkelingssystemen, continue integratie en testtools mogelijk maakt, en daarnaast biedt het mogelijkheden zoals naleving van code-stijl richtlijnen. Zowel de eigen parser als de externe parser van Clang kunnen worden gebruikt voor de code-analyse. Ook bevat de tool het script donate-cpu.py voor het aanbieden van lokale middelen voor het gezamenlijk controleren van Debian-pakketten. De bronbestanden van het project zijn beschikbaar onder de GPLv3-licentie.

De ontwikkeling van cppcheck is gericht op het identificeren van problemen gerelateerd aan onbepaald gedrag en het gebruik van constructies die potentieel onveilig zijn. Een ander doel is het minimaliseren van valse positieven. Onder de geïdentificeerde problemen zijn: pointers naar niet-bestaande objecten, delingen door nul, gehele getaloverlopen, onjuiste bitverschuivingen, onjuiste conversies, problemen met geheugenbeheer, onjuist gebruik van STL, derefereren van nul-pointers, controles uitvoeren na daadwerkelijke toegang tot een buffer, bufferoverlopen, en het gebruik van niet-geïnitieerde variabelen.

In de nieuwe versie:

  • De volgende controles zijn aan de kernel van de analyse tool toegevoegd:
    • afwezigheid van een return statement in de functiebody;
    • overschrijvende gegevensschrijvingen, onbepaald gedrag;
    • het te vergelijken waarde ligt buiten de reikwijdte van de datatypes;
    • optimalisatie van kopiëren wordt niet toegepast voor return std::move(local);
    • een bestand kan niet gelijktijdig voor lezen en schrijven worden geopend in verschillende streams;
  • voor Unix-platforms is ondersteuning toegevoegd voor het weergeven van diagnostische berichten in verschillende kleuren;
  • symbolische analyse voor ValueFlow is toegevoegd. Er wordt een eenvoudige delta gebruikt om verschillen tussen twee onbekende variabelen te berekenen;
  • de regels die worden gebruikt voor de tokenlijst 'define' kunnen ook van toepassing zijn op #include;
  • De bibliotheektag kan nu de tag bevatten, en overeenkomstig kunnen functies zoals std::size, std::empty, std::begin, std::end, enz. yeld of action voor containers aangeven;
  • De bibliotheektag kan nu de tag bevatten voor slimme pointers die unieke eigendom (unique ownership) hebben. Er wordt nu een waarschuwing gegeven voor 'hangende' verwijzingen naar dit soort slimme pointers;
  • Problemen met de parameter —cppcheck-build-dir zijn opgelost;
  • htmlreport kan nu auteurinformatie weergeven (met behulp van git blame);
  • De waarschuwingen voor variabelen die niet constant zijn, maar dat wel zouden kunnen zijn, zijn uitgebreid;
  • Opgehoopte fouten en tekortkomingen van de analyzer zijn opgelost.

Daarnaast zijn de controles van Misra C 2012 volledig geïmplementeerd, inclusief Amendment 1 en Amendment 2, behalve de regels 1.1, 1.2 en 17.3. Controles 1.1 en 1.2 moeten door de compiler worden uitgevoerd. Controle 17.3 kan door de compiler worden uitgevoerd, bijvoorbeeld GCC.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster