Uitgave van cppcheck 2.6, een statische code-analysator voor C++- en C-talen

Er is een nieuwe versie van de statische code-analysator cppcheck 2.6 uitgebracht, waarmee u verschillende soorten fouten in code in de talen C en C++ kunt identificeren, ook bij gebruik van niet-standaard syntaxis, typisch voor embedded systemen. Er wordt een verzameling plug-ins geleverd waarmee cppcheck kan worden geïntegreerd met verschillende ontwikkelings-, continue integratie- en testsystemen, en die ook functies biedt zoals het controleren van de naleving van de codestijl. Om code te parseren, kunt u uw eigen parser of een externe parser van Clang gebruiken. Het bevat ook het doneren-cpu.py-script om lokale bronnen te bieden voor het gezamenlijk uitvoeren van codebeoordelingswerk voor Debian-pakketten. De broncode van het project wordt gedistribueerd onder de GPLv3-licentie.

De ontwikkeling van cppcheck is gericht op het identificeren van problemen die verband houden met ongedefinieerd gedrag en het gebruik van ontwerpen die vanuit veiligheidsoogpunt gevaarlijk zijn. Het doel is ook om valse positieven te minimaliseren. Onder de geïdentificeerde problemen: verwijzingen naar niet-bestaande objecten, delingen door nul, integer-overflows, onjuiste bitverschuivingsbewerkingen, onjuiste conversies, problemen bij het werken met geheugen, onjuist gebruik van STL, null pointer-dereferenties, het gebruik van controles na de daadwerkelijke toegang naar de buffer, bufferoverruns, gebruik van niet-geïnitialiseerde variabelen.

In de nieuwe versie:

  • De volgende controles zijn toegevoegd aan de analyserkern:
    • afwezigheid van een retouroperator in het functieorgaan;
    • registreert overlappende gegevens, bepaalt ongedefinieerd gedrag;
    • de waarde die wordt vergeleken valt buiten de waardeweergave van het type;
    • kopieeroptimalisatie is niet van toepassing op het retourneren van std::move(local);
    • het bestand kan niet tegelijkertijd worden geopend voor lezen en schrijven in verschillende streams (stream);
  • voor Unix-platforms is er ondersteuning toegevoegd voor het weergeven van diagnostische berichten in verschillende kleuren;
  • symbolische analyse toegevoegd voor ValueFlow. Gebruikt eenvoudige delta bij het berekenen van het verschil tussen twee onbekende variabelen;
  • de regels die worden gebruikt voor de lijst met tokens "define" kunnen ook overeenkomen met #include;
  • bibliotheek-tag kan nu een tag bevatten , en dienovereenkomstig de gratis functies, die containers kunnen accepteren zoals std::size, std::empty, std::begin, std::end, etc. kan veld of actie voor connectoren specificeren;
  • bibliotheek-tag kan nu een tag bevatten voor slimme wijzers met een uniek eigendom. Er wordt nu gewaarschuwd voor bungelende verwijzingen naar dit soort slimme aanwijzingen;
  • problemen opgelost met het verwerken van de parameter —cppcheck-build-dir;
  • htmlreport kan nu informatie over de auteur weergeven (met behulp van git blaam);
  • uitgebreide waarschuwingen over variabelen die niet constant zijn, maar dat wel zouden kunnen zijn;
  • De geaccumuleerde fouten en tekortkomingen van de analysator zijn gecorrigeerd.

Bovendien zijn de controles uit Misra C 2012, inclusief Amendement 1 en Amendement 2, volledig geïmplementeerd, met uitzondering van de regels 1.1, 1.2 en 17.3. Controles 1.1 en 1.2 moeten door de compiler worden uitgevoerd. Verificatie 17.3 kan worden uitgevoerd door een compiler zoals GCC.

Bron: opennet.ru

Voeg een reactie