Вышел новый релиз PVS-Studio — 7.38. Новое ядро для C и C++ анализатора, механизм пользовательских аннотаций в Java анализаторе, улучшение анализа заражённых данных, и это ещё не всё! Больше подробностей в этом пресс-релизе.
Загрузить актуальную версию PVS-Studio можно здесь.
Новое ядро C и C++ анализатора
Новое ядро включает полностью переработанные компоненты: парсер, семантический анализатор и систему типов. Оно обеспечивает более точную обработку шаблонных конструкций, улучшенный разбор стандартной библиотеки и кода на современных стандартах языка C++. В ходе расширенного периода тестирования (EAP) была достигнута стабильная работа нового ядра на большом количестве реальных проектов.
Для обеспечения обратной совместимости сохранена возможность временного переключения на предыдущую версию ядра. Сделать это можно с помощью следующих утилит:
утилита pvs-studio-analyzer с помощью флага —use-old-parser;
файл конфигурации диагностик .pvsconfig с помощью флага //V_USE_OLD_PARSER;
файл конфигурации анализа Settings.xml с помощью тега ;
вкладка Specific Analyzer Settings с помощью настройки Use Old Cpp Parser.
В случае возникновения проблем при анализе рекомендуем сообщить о них в техническую поддержку. Ваша обратная связь поможет ускорить финальную стабилизацию нового ядра C и C++ анализатора.
Механизм пользовательских аннотаций в Java анализаторе
В Java анализатор PVS-Studio был добавлен механизм пользовательских аннотаций — способ разметки типов и функций в формате JSON для передачи анализатору дополнительной информации. Ранее такая возможность была доступна только в анализаторах C++ и C#.
Теперь можно размечать методы и конструкторы как источники, приёмники и валидаторы taint-данных. Это позволяет анализатору находить больше уязвимостей, каждая из которых соответствует отдельному диагностическому правилу.
Подробнее об этой функциональности можно прочитать в нашей документации.
Разделение диагностических правил по версии стандарта MISRA
На странице классификации предупреждений PVS-Studio согласно стандартам MISRA C и MISRA C++ появилось разделение по версии стандарта.
Мы продолжаем увеличивать покрытие стандарта MISRA C 2023 и планируем завершить работы в этом направлении до конца 2025 года.
Подробнее о классификации можно прочитать в нашей документации.
Интеграция PVS-Studio в OpenIDE
Плагин PVS-Studio появился на портале плагинов для интегрированной среды разработки OpenIDE.
OpenIDE — бесплатная лицензионно чистая IDE на базе IntelliJ IDEA Community Edition с открытым исходным кодом. Недавно мы выпустили небольшую статью про интеграцию плагина в OpenIDE и привели подробную инструкцию по его установке и использованию.
Подробнее о работе с этим плагином можно прочитать в документации.
Улучшение механизма taint-анализа
В C и C++ анализаторе улучшен механизм анализа помеченных данных (taint-анализ). Теперь корректно отслеживается заражённость при использовании оператора %, исправлено отсутствие предупреждений о передаче зараженных данных в функцию ReadFile, а также улучшена обработка taint-статусов в ветвлениях. Это повышает точность обнаружения уязвимостей, связанных с непроверенными данными.
Классификация критических ошибок в SonarQube
В плагин PVS-Studio для системы контроля качества кода SonarQube добавлена классификация срабатываний анализатора PVS-Studio в соответствии со списком критических ошибок из стандарта ГОСТ Р 71207-2024. Стандарт посвящён использованию статических анализаторов в процессе разработки безопасного программного обеспечения (РБПО).
Теперь предупреждения анализатора размечаются метками с префиксом SEC-, что упрощает и ускоряет соответствие стандарту ГОСТ Р 71207-2024.
Подробнее об этой классификации можно прочитать по ссылке.
Breaking Changes
Данные изменения ломают обратную совместимость с предыдущими версиями анализатора. В связи с ними вам может потребоваться изменить способ использования анализатора.
Изменено сообщение для диагностического правила V1062 в случаях, когда оно выдаётся на = delete. Возможно повторное попадание ранее подавленных срабатываний в отчёт анализатора.
Из-за распространения механизма анализа помеченных данных на диагностические правила V557, V609, V610, V1083 и V575 возможно повторное возникновение ранее подавленных сообщений, выданных диагностическим правилом V5009.
Изменён синтаксис описания параметров методов и конструкторов в JSON-аннотациях для C# анализатора PVS-Studio. Подробнее об обновлённом синтаксисе можно прочитать в документации.
Новые диагностические правила
C и C++:
V2644. MISRA. Controlling expression of generic selection must not have side effects.
V2645. MISRA. The language features specified in Annex K should not be used.
V2646. MISRA. All arguments of any multi-argument type-generic macros from should have the same type.
V2647. MISRA. Structure and union members of atomic objects should not be directly accessed.
V2648. MISRA. Null pointer constant must be derived by expansion of the NULL macro provided by the implementation.
V2649. MISRA. All arguments of any type-generic macros from should have an appropriate essential type.
V2650. MISRA. Controlling expression of generic selection must have essential type that matches its standard type
V2651. MISRA. Combining positional initialization with chained designators are forbidden inside the initializer list.
C#:
V3224. Consider using an overload with ‘IEqualityComparer’, as it is present in similar cases for the same collection element type.
V3225. A data reading method returns the number of bytes that were read and cannot return the value of -1.
Java:
V5333. OWASP. Possible insecure deserialization vulnerability. Potentially tainted data is used to create an object during deserialization.
V5334. OWASP. Possible server-side request forgery. Potentially tainted data is used in the URL.
V6132. It is possible that ‘else’ block was forgotten or commented out, thus altering the program’s operation logics.
Статьи
Для тех, кто пишет на C++:
Меньше багов — больше FPS: как статический анализ помогает проектам на Unreal Engine
Окно в терминальной стадии
Маленькое приключение в поиске ошибок. The Battle for Wesnoth!
С++ без классов?
Для тех, кто пишет на C#:
Stonks или not stonks. Проверка исходного кода трейдерского движка Lean
На защите GameDev’a: статический анализ и Unity
.SLN умер. Да здравствует .SLNX!
.NET Digest #8
Путешествие по Avalonia
Для тех, кто пишет на Java:
Пользовательские аннотации PVS-Studio теперь и в Java
PVS-Studio доступен в OpenIDE
Ошибки Java по ГОСТу: обзор и примеры
Method Handles быстрее рефлексии (иногда)
Карты, Java, 2 null’а. XMage edition
История Java: развитие, изучение Марса, битва с Microsoft, Spring, Gradle и Maven, IntelliJ IDEA и Eclipse
Статьи общей направленности:
Безболезненное внедрение статического анализа и победа над ложными срабатываниями
Статический анализ Pull Request’ов — ещё один шаг к регулярности
Код красный: как разработчику превратить негативный фидбек в позитивный результат
Синдром тревожного анализатора и разработчика-заложника
Вебинары
Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024
Новый ГОСТ Р 56939-2024 описывает 25 процессов для создания безопасного программного обеспечения (РБПО). Каждый из этих процессов можно представить в виде списка действий, направленных на создание более зрелого цикла разработки ПО в компании.
Учебный Центр «МАСКОМ» и PVS-Studio организуют цикл вебинаров, посвящённых разбору этих 25 процессов.
Вебинары проходят каждую неделю, регистрация доступна по ссылке.
Безопасность приложений: инструменты и практики для Java-разработчиков
В этом вебинаре спикеры определили, как максимально быстро и эффективно обеспечить защиту Java-приложений и какие инструменты для этого использовать. Поговорили про ГОСТ, критические ошибки и процесс безопасной разработки. Показали на примерах, как использовать анализатор PVS-Studio и продукты компании Axiom JDK.
Посмотреть можно по ссылке.
Полезные видео для работы с PVS-Studio
Что такое PVS-Studio?
В этом небольшом видео мы затрагиваем самые важные темы и аспекты статического анализатора PVS-Studio. Вы сможете узнать не только, как он может вам помочь, но и какие в нём используются механизмы и подходы.
Посмотреть можно по ссылке.
Интеграция результатов анализа PVS-Studio в SonarQube
Для пользователей PVS-Studio существует плагин, позволяющий добавлять сообщения анализатора в базу сообщений SonarQube. В этом видео на примере проверки C++ проекта мы показали, как интегрировать результаты анализа PVS-Studio в SonarQube.
Посмотреть можно по ссылке.
Использование расширения PVS-Studio для Visual Studio Code
Для работы со статическим анализатором кода PVS-Studio в Visual Studio Code есть специальное расширение, работу которого мы рассмотрели в этом видео.
Посмотреть можно по ссылке.
Как работать с PVS-Studio в Visual Studio
Плагин PVS-Studio для среды разработки Microsoft Visual Studio предоставляет широкий спектр возможностей. В этом видео мы рассказали, как установить анализатор, запустить анализ на проекте, а также о том, какие настройки помогут сделать отчёт анализатора более точным.
Посмотреть можно по ссылке.
Доклады
Серия докладов про новый ГОСТ Р 56939-2024
Андрей Карпов, сооснователь PVS-Studio, в серии докладов разобрал новый ГОСТ Р 56939-2024: причины его создания, содержание, процессы РБПО и особенности сертификации.
Посмотреть можно по ссылке.
Регулярный статический анализ. Не только полезно, но и необходимо | Merge Tatarstan 2025
Зачем нужен статический анализ кода, как он помогает находить потенциальные уязвимости и ошибки? В своем докладе Валерий Филатов, C# разработчик PVS-Studio, рассказал о практических методах, типичных ошибках и о том, как сделать статический анализ реальным инструментом повышения качества, а не формальной галочкой в отчёте.
Посмотреть можно по ссылке.
Типовые паттерны опечаток в коде и как с ними бороться
Андрей Карпов, автор книги «Вредные советы для C++ программистов», раскрыл главные антипаттерны в коде — какие ошибки делают все и как их не повторять.
Посмотреть можно по ссылке.
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS-Studio по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Aleksandra Uvarova. PVS-Studio 7.38: new C++ analyzer core, user annotations in Java, enhanced taint analysis, and more.
Источник: habr.com