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

Została udostępniona nowa wersja statycznego analizatora kodu cppcheck 2.6, który umożliwia identyfikację różnych klas błędów w kodzie w językach C i C++, także przy zastosowaniu niestandardowej składni, typowej dla systemów wbudowanych. Dostępny jest zbiór wtyczek, dzięki którym cppcheck integruje się z różnymi systemami programistycznymi, ciągłej integracji i testowania, a także zapewnia takie funkcje, jak sprawdzanie zgodności kodu ze stylem kodu. Aby przeanalizować kod, możesz użyć własnego parsera lub zewnętrznego parsera firmy Clang. Zawiera także skrypt donate-cpu.py zapewniający lokalne zasoby umożliwiające wspólne przeglądanie kodu pakietów Debiana. Kod źródłowy projektu rozpowszechniany jest na licencji GPLv3.

Rozwój cppcheck koncentruje się na identyfikacji problemów związanych z niezdefiniowanym zachowaniem i stosowaniem projektów niebezpiecznych z punktu widzenia bezpieczeństwa. Celem jest również zminimalizowanie liczby fałszywych alarmów. Wśród zidentyfikowanych problemów: wskaźniki do nieistniejących obiektów, dzielenie przez zero, przepełnienia liczb całkowitych, nieprawidłowe operacje przesunięcia bitowego, nieprawidłowe konwersje, problemy podczas pracy z pamięcią, nieprawidłowe użycie STL, dereferencje wskaźników zerowych, stosowanie kontroli po rzeczywistym dostępie do bufora, przepełnienia bufora, użycie niezainicjowanych zmiennych.

W nowej wersji:

  • Do rdzenia analizatora dodano następujące kontrole:
    • brak operatora powrotu w treści funkcji;
    • rejestruje nakładające się dane, określa niezdefiniowane zachowanie;
    • porównywana wartość znajduje się poza reprezentacją wartości typu;
    • optymalizacja kopiowania nie dotyczy return std::move(local);
    • plik nie może być otwarty jednocześnie do odczytu i zapisu w różnych strumieniach (strumień);
  • dla platform Unix dodano obsługę wyświetlania komunikatów diagnostycznych w różnych kolorach;
  • dodano analizę symboliczną dla ValueFlow. Używa prostej delty przy obliczaniu różnicy między dwiema nieznanymi zmiennymi;
  • reguły użyte do „definiowania” listy tokenów mogą również pasować do #include;
  • znacznik biblioteki może teraz zawierać znacznik i odpowiednio darmowe funkcje, które mogą akceptować kontenery takie jak std::size, std::empty, std::begin, std::end itp. może określić wydajność lub akcję dla złączy;
  • znacznik biblioteki może teraz zawierać znacznik dla inteligentnych wskaźników, które mają unikalną własność. Wyświetlane jest teraz ostrzeżenie dotyczące zawieszonych odniesień do tego typu inteligentnych wskaźników;
  • naprawiono problemy z przetwarzaniem parametru —cppcheck-build-dir;
  • htmlreport może teraz wyświetlać informacje o autorze (przy użyciu git obwinianie);
  • rozszerzone ostrzeżenia o zmiennych, które nie są stałe, ale mogą być;
  • Nagromadzone błędy i niedociągnięcia analizatora zostały poprawione.

Ponadto kontrole z Misra C 2012, w tym poprawka 1 i poprawka 2, zostały w pełni wdrożone, z wyjątkiem zasad 1.1, 1.2 i 17.3. Kompilator musi wykonać kontrole 1.1 i 1.2. Weryfikację 17.3 można przeprowadzić za pomocą kompilatora, takiego jak GCC.

Źródło: opennet.ru

Dodaj komentarz