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
