Wydanie cppcheck 2.6, statycznego analizatora kodu dla języków C++ i C

Wydano nową wersję narzędzia do analizy statycznej kodu cppcheck 2.6, które pozwala na identyfikację różnych klas błędów w kodzie napisanym w językach C i C++, w tym również przy użyciu niestandardowej składni typowej dla systemów wbudowanych. Oferuje zestaw wtyczek, które zapewniają integrację cppcheck z różnymi systemami programistycznymi, ciągłą integracją oraz testowaniem, a także możliwości takie jak sprawdzanie zgodności kodu z jego stylem formatowania. Do analizy kodu może być używany zarówno własny parser, jak i zewnętrzny parser od Clang. W zestawie znajduje się także skrypt donate-cpu.py do udostępniania lokalnych zasobów do wspólnej analizy kodu pakietów Debian. Kody źródłowe projektu są dystrybuowane na podstawie licencji GPLv3.

Rozwój cppcheck skupia się na identyfikowaniu problemów związanych z nieokreślonym zachowaniem oraz wykorzystaniem konstrukcji niebezpiecznych dla bezpieczeństwa. Celem jest również minimalizacja fałszywych alarmów. Wśród identyfikowanych problemów znajdują się: wskaźniki do nieistniejących obiektów, dzielenia przez zero, przepełnienia liczb całkowitych, nieprawidłowe operacje przesunięć bitowych, nieprawidłowe konwersje, problemy z pamięcią, niewłaściwe korzystanie z STL, dereferencje wskaźników zerowych, używanie sprawdzeń po rzeczywistym dostępie do bufora, wychodzenie poza granice buforów, używanie niezdobionych zmiennych.

W nowej wersji:

  • Do jądra analizy dodano następujące kontrole:
    • braku operatora return w ciele funkcji;
    • zapisu nakładających się danych, ustalania nieokreślonego zachowania;
    • porównywana wartość znajduje się poza zakresem typu;
    • optymalizacja kopiowania nie jest stosowana dla return std::move(local);
    • pliki nie mogą być jednocześnie otwierane do odczytu i zapisu w różnych strumieniach;
  • dla platform Unix dodano wsparcie dla wyświetlania komunikatów diagnostycznych w różnych kolorach;
  • dodano analizę symboli dla ValueFlow. Używana jest prosta delta przy obliczaniu różnic między dwiema nieznanymi zmiennymi;
  • reguły stosowane dla listy tokenów „define” mogą również dotyczyć #include;
  • Tag biblioteki może teraz zawierać tag , a odpowiednio funkcje free, które mogą przyjmować takie kontenery jak std::size, std::empty, std::begin, std::end itd. mogą wskazywać yeld lub action dla kontenerów;
  • Tag biblioteki może teraz zawierać tag dla inteligentnych wskaźników, które mają wyłączne posiadanie (unique ownership). Teraz występuje ostrzeżenie o 'wiszących' odniesieniach do tego typu inteligentnych wskaźników;
  • Naprawiono problemy z przetwarzaniem parametru —cppcheck-build-dir;
  • htmlreport może teraz wyświetlać informacje o autorze (za pomocą git blame);
  • Rozszerzono zgłaszanie ostrzeżeń o zmiennych, które nie są stałe, ale mogłyby nimi być;
  • Naprawiono zgromadzone błędy i niedociągnięcia analizatora.

Dodatkowo w pełni zaimplementowano kontrole z Misra C 2012, w tym poprawki 1 i 2, z wyjątkiem zasad 1.1, 1.2 i 17.3. Kontrole 1.1 i 1.2 powinny być realizowane przez kompilator. Kontrolę 17.3 może wykonać kompilator, na przykład GCC.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster