Вышел новый релиз PVS-Studio — 7.36. Встречайте расширение поддержки MISRA, плагин для Qt Creator 16, расширение пользовательских аннотаций в C# и ещё много других обновлений! Больше подробностей в этой заметке.
Загрузить актуальную версию PVS-Studio можно здесь.
Выбор версии стандартов MISRA C и MISRA C++
В C и C++ анализаторе PVS-Studio была добавлена возможность задать версии стандартов MISRA C и MISRA C++. Выбрать используемую версию стандарта можно в настройках PVS-Studio плагина для Visual Studio.
Поддерживаемые версии стандартов: MISRA C 2012, MISRA C 2023, MISRA C++ 2008 и MISRA C++ 2023.
Расширение механизма пользовательских аннотаций в C#
В C# анализаторе был расширен механизм пользовательских аннотаций. До этого пользователи могли создавать аннотации только для taint-анализа.
В анализаторе существует ряд аннотаций для taint-анализа. С их помощью можно размечать источники и приёмники заражения. Также можно помечать методы/конструкторы, которые производят валидацию taint-данных. Таким образом, если taint-данные прошли валидацию, то при их попадании в приёмник анализатор не выдаст предупреждение.
Теперь появилась возможность с помощью пользовательских аннотаций указать анализатору информацию, которая необходима не только для taint-анализа. Например, можно указать, что метод может вернуть null, что возвращаемое значение метода нужно использовать или что аргумент метода не должен быть равен null, и ещё много чего.
Подробнее об этом можно прочитать в нашей документации.
Плагин PVS-Studio для Qt Creator 16
Плагин PVS-Studio теперь доступен для Qt Creator версий 16.x, а вот поддержка для версий Qt Creator 10.x прекращена. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза.
Подробнее об использовании PVS-Studio в Qt Creator можно узнать в нашей документации.
Доработки флагов файлов конфигурации
В кроссплатформенную утилиту для проверки C и C++ проектов pvs-studio-analyzer добавлен новый флаг --apply-pvs-configs.
С помощью него включается режим автоматического поиска и применения файлов конфигурации правил .pvsconfig для проверяемых исходных файлов. Поиск самих файлов конфигурации правил происходит в каталоге исходного файла и во всех родительских каталогах вплоть до корневой папки проекта, которая указывается с помощью нового флага --project-root.
Подробнее об этом можно прочитать в нашей документации.
Флаг --analysis-paths в утилите командной строки pvs-studio-analyzer получил новый режим isolate-settings.
Он позволяет изолировать настройки, назначаемые с помощью файлов конфигурации правил .pvsconfig внутри заданной директории. Настройки, лежащие в родительских для этой директории папках, в этом режиме игнорируются.
Подробнее об этом можно прочитать в нашей документации.
Также для этого режима были добавлены настройки для файла .pvsconfig: //V_ANALYSIS_PATHS isolate-settings и //V_ISOLATE_CURRENT_DIR. Подробнее об этом можно прочитать в соответствующем разделе документации.
Обновление документации
Была добавлена документация по использованию анализатора PVS-Studio в сервисе для хранения исходного кода GitFlic, а также в DevSecOps платформах Hexway и AppSec.Hub.
Breaking Changes
Эти изменения ломают обратную совместимость с предыдущими версиями анализатора. Из-за этого может потребоваться изменить способ использования анализатора.
При анализе C и C++ проектов на основе compile_commands.json в утилите командной строки pvs-studio-analyzer теперь игнорируются все вызовы не компиляторов. Для работы с компиляторами, имеющими нестандартные имена, которые не определяются PVS-Studio по умолчанию, можно использовать флаг --compiler. Подробнее об этом можно узнать в соответствующем разделе нашей документации.
Минимальная рекомендуемая версия macOS для запуска анализатора PVS-Studio на процессорах с архитектурой x86-64 — macOS Big Sur (11.1).
Полный список изменений вы сможете найти на странице истории версий PVS-Studio.
Новые диагностические правила
C, С++
V2634. MISRA. Features from <fenv.h> should not be used.
V2635. MISRA. The function with the 'system' name should not be used.
V2636. MISRA. The functions with the 'rand' and 'srand' name of <stdlib.h> should not be used.
V2637. MISRA. A 'noreturn' function should have 'void' return type.
V2638. MISRA. Generic association should list an appropriate type.
V2639. MISRA. Default association should appear as either the first or the last association of a generic selection.
V2640. MISRA. Thread objects, thread synchronization objects and thread-specific storage pointers should have appropriate storage duration.
V2641. MISRA. Types should be explicitly specified.
V2642. MISRA. The '_Atomic' specifier should not be applied to the incomplete type 'void'.
V2643. MISRA. All memory synchronization operation should be executed in sequentially consistent order.
C#
V3218. Cycle condition may be incorrect due to an off-by-one error.
V3219. The variable was changed after it was captured in a LINQ method with deferred execution. The original value will not be used when the method is executed.
V3220. The result of the LINQ method with deferred execution is never used. The method will not be executed.
V3221. Modifying a collection during its enumeration will lead to an exception.
V5629. OWASP. Code contains invisible characters that may alter its logic. Consider enabling the display of invisible characters in the code editor.
Java
V5320. OWASP. Use of potentially tainted data in configuration may lead to security issues.
V5321. OWASP. Possible LDAP injection. Potentially tainted data is used in a search filter.
V5322. OWASP. Possible reflection injection. Potentially tainted data is used to select class or method.
V5323. OWASP. Potentially tainted data is used to define 'Access-Control-Allow-Origin' header.
V5324. OWASP. Possible open redirect vulnerability. Potentially tainted data is used in the URL.
V5325. OWASP. Setting the value of the 'Access-Control-Allow-Origin' header to '*' is potentially insecure.
V5326. OWASP. OWASP. A password for a database connection should not be empty.
V5327. OWASP. Possible regex injection. Potentially tainted data is used to create regular expression.
V5328. OWASP. Using weak authorization checks could lead to security violations.
V5329. OWASP. Using unsafe methods of file creation is not recommended because an attacker might access the files.
V5330. OWASP. Possible XSS injection. Potentially tainted data might be used to execute a malicious script.
Статьи
Для тех, кто пишет на C++:
Бета-тестирование: обновлённый парсер для анализа кода на языках C и C++
std::array в С++ быстрее массива в С. Иногда
Безопасная работа с массивами? Нет, не слышали
Вторая часть исследования Nau Engine
Третья часть исследования Nau Engine
Учимся рефакторить код на примере багов в TDengine, часть 1: про колбасу
Учимся рефакторить код на примере багов в TDengine, часть 2: макрос, пожирающий стек
Учимся рефакторить код на примере багов в TDengine, часть 3: плата за лень
Для тех, кто пишет на C#:
PVS-Studio в разработке на Unity: новые специализированные диагностики
Copy-paste на большом экране: разбор ошибок и странных мест Radarr
Графический переполох: что таит в себе ScottPlot?
Инновационные технические решения и баги в исходном коде PowerShell
.NET Digest #6
Для тех, кто пишет на Java:
Нововведения Java 24
Инъекция блокнотом или история о том, как мы новые диагностики делали
Поиск потенциальных уязвимостей в коде, часть 2: практика
Статьи общей тематики:
Новые интересные диагностики в PVS-Studio 7.35
Грязный код — надёжное хранилище ошибок. Теория разбитых окон
Всё ли знает ChatGPT? Проверяем факты о PVS-Studio
Доклады
Модельные варианты ошибок в статических анализаторах
ГОСТ Р 71207, касающийся статического анализа кода, вводит термин "модельный вариант" ошибок. Дело в том, что невозможно в общем виде искать такие ошибки, как неопределенное поведение, разыменование нулевых указателей или опечатки. Но искать их нужно. Как же создатели анализаторов выходят из этой ситуации? Как раз с помощью понятия модельных вариантов ошибок (даже не зная, что они так называются), сводя поиск ошибки общего типа к задаче поиска ошибок множества подтипов.
Андрей Карпов предлагает заглянуть внутрь PVS-Studio и посмотреть, как происходит поиск ошибок, несмотря на технологические ограничения методологии статического анализа.
Посмотреть можно тут:
C++ и неопределённое поведение
Мы пригласили в гости Дмитрия Свиридкина — создателя книги "Путеводитель C++ программиста по неопределённому поведению". Обсудили грани, отделяющие корректный C++ код от некорректного, попросили рассказать историю написания книги, поговорили о развитии языка и его будущем.
Посмотреть можно тут:
SAST как Quality Gate
Использование SAST в качестве Quality Gate — это не просто тренд, а необходимость для современных разработчиков, стремящихся создавать надёжные и безопасные приложения. Рассказали, как внедрение этих практик может значительно повысить уровень вашего проекта.
Посмотреть можно тут:
Внедрение процессов безопасной разработки. Интеграция PVS-Studio и SGRC SECURITM
Совместно с экспертом SECURITM Евгенией Карповой мы поговорили о том, как обеспечить соблюдение требований ГОСТ в области безопасной разработки программного обеспечения.
Показали реальные примеры использования PVS-Studio и SECURITM, дали рекомендации по настройке инструментов и рассказали, как оптимизировать процессы разработки для достижения высокого уровня безопасности.
Посмотреть можно тут:
ГОСТ Р 71207–2024. Безопасная разработка и статический анализ
Использование статических анализаторов кода является одним из условий разработки безопасного ПО.
Но возникали вопросы: какие инструменты выбрать? что они должны уметь? как "правильно" проводить анализ и организовать процесс?
С ответами поможет новый ГОСТ, вышедший в апреле 2024 года — ГОСТ Р 71207-2024: "Статический анализ программного обеспечения".
В докладе рассмотрели самые важные темы ГОСТа, его актуальность, новые требования, подходы к анализу и многое другое.
Посмотреть можно тут:
Ищем ошибки в начале, в середине и в конце разработки
В докладе подняли тему поиска ошибок, качества кода и безопасной разработки.
Поговорили о технологиях статического анализа и SAST-инструментах как способах поиска потенциальных ошибок и уязвимостей на ранних этапах разработки и всем цикле разработки ПО. Разобрали особенности этих инструментов, как они работают, а также кому это может пригодиться и как подобрать инструмент.
Посмотреть можно тут:
Как статический анализ дополняет тестирование продукта
Разберем тему использования статического анализа в связке с тестированием. Как он работает на реальных примерах, какие примеры решает, а также как может помочь оптимизировать код проекта. Немного заглянем в сторону безопасности, уязвимостей и стандартов.
А еще пару лайфхаков при использовании инструмента.
Как искать ошибки и уязвимости во время разработки
Многие слышали и о статических анализаторах, и о SAST-инструментах, но в чём же реально их польза? Ну, во-первых, они могут выявить потенциальные ошибки и уязвимости на ранних этапах разработки и всём цикле ПО, но как это проверить? Рассказали в докладе.
Посмотреть можно тут:
Роли в IT: Developer Advocate
Как говорил современный тимлид: "Понапишут свой код, а потом адвокатов ищут". Кто такой Developer Advocate и чем он отличает от DevRel и маркетолога? Как сделать так, чтобы тебе платили деньги за то, что ты не пишешь код? Какие перспективы есть у человека на этой должности? Узнаете в этом выпуске.
Посмотреть можно тут:
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS-Studio по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Gleb Aslamov. PVS-Studio 7.36: expanded MISRA support, plugin for Qt Creator 16, enhanced user annotations for C#, and much more.
Источник новости: habr.com