>
>
PVS-Studio 7.33: критические ошибки, по…

Валерий Филатов
Статей: 5

PVS-Studio 7.33: критические ошибки, пользовательские аннотации в C#, поддержка SN-DBS и многое другое

Вышел новый релиз PVS-Studio — 7.33. Поддержка SN-DBS, добавление пользовательских аннотаций в C# анализатор, новые вебинары, подкасты и много других хороших новостей! Больше подробностей в этой заметке.

Загрузить актуальную версию PVS-Studio можно по этой ссылке.

Фильтрация критических ошибок

В утилиту PVS-Studio_Cmd.exe была добавлена возможность отображения информации о критических ошибках согласно ГОСТ Р 71207-2024 об использовании статического анализа при разработке безопасного программного обеспечения. Для отображения новой классификации в поле SAST нужно включить настройку "Security Related Issues" в плагине PVS-Studio для Visual Studio.

PVS-Studio и Unreal Engine

  • Для интеграции анализатора PVS-Studio с движком Unreal Engine была добавлена поддержка системы распределённой сборки SN-DBS. Изменения актуальны для версии Unreal Engine 5.5. Подробнее можно прочитать в нашей документации о использовании PVS-Studio с Unreal Engine.
  • В C++ анализаторе было уменьшено количество ложных срабатываний при анализе кода Unreal Engine проектов. Унифицирована обработка встроенных функций компилятора __builtin_expect и доработана обработка выражений явных приведений к bool. Это улучшило анализ check-функций, управляемых макросом DO_CHECK в проектах Unreal Engine.

Потребление памяти

В C++ анализаторе PVS-Studio было уменьшено потребление памяти при анализе инстанцирования шаблонов, а также инициализации большого количества глобальных переменных строковыми литералами.

Пользовательские аннотации

В C# анализаторе PVS-Studio добавлена возможность проставления пользовательских аннотаций функций и типов в формате JSON. Ранее подобная функциональность была доступна только в C++ анализаторе PVS-Studio. Подробнее об этой функциональности можно прочитать в нашей документации.

В системе пользовательских аннотаций функций и типов комментарий //V_PVS_ANNOTATIONS $path для включения пользовательских аннотаций помечен как устаревший. В качестве замены предлагается использовать комментарий вида //V_PVS_ANNOTATIONS, language: $lang, path: $path.

PVS-Studio на Нейтрино

Плагин PVS-Studio для Qt Creator портирован на комплект разработчика для операционной системы "Нейтрино". Из данного комплекта поддержана работа с Qt Creator 6.0.2 (Qt 5.15).

Новое поле в отчёте C++ анализатора

В формат JSON отчёта C++ анализатора PVS-Studio было добавлено новое поле analyzedSourceFiles. В данное поле записывается дополнительная информация о том, в какой единице трансляции произошло срабатывание диагностического правила. Это полезно в случаях, когда потенциальная ошибка содержится в заголовочных файлах.

Breaking Changes

Данные изменения ломают обратную совместимость с предыдущими версиями анализатора. В связи с ними вам может потребоваться изменить способ использования анализатора.

  • Были подняты версии форматов отчётов анализаторов PVS-Studio .json и .plog до версий 3 и 9 соответственно. Теперь у C# проектов, имеющих несколько целевых фреймворков (target framework), имя фреймворка не приписывается к имени проекта.
  • Версия JSON-схемы пользовательских аннотаций функций и типов PVS-Studio поднята до версии 2. В схему была добавлена новая сущность language. Она позволяет использовать пользовательские аннотации только в анализаторе для конкретного языка. Помимо этого, было изменено значение поля id.
  • Минимальные поддерживаемые версии IDE JetBrains IDEA, CLion и Rider были подняты до версии 2022.2.
  • Изменено разрешение путей в плагине PVS-Studio для сборочной системы Gradle. Теперь относительные пути из конфигурации разрешаются относительно директории проекта, а не относительно директории gradle daemon.
  • Была удалена возможность конвертации отчёта PVS-Studio при помощи утилит plog-converter в формат SARIF, используемый в плагине SARIF Viewer для Visual Studio Code. Конвертация в стандартный отчёт формата SARIF сохранена.

Новые диагностические правила

C, C++:

  • V1113. Potential resource leak. Calling the 'memset' function will change the pointer itself, not the allocated resource. Check the first and third arguments.
  • V1114. Suspicious use of 'dynamic_cast' when working with COM interfaces. Consider using the 'QueryInterface' member function.
  • V1115. Function annotated with the 'pure' attribute has side effects.

C#:

  • V3204. The expression is always false due to implicit type conversion. Overflow check is incorrect.
  • V3205. Unity Engine. Improper creation of 'MonoBehaviour' or 'ScriptableObject' object using the 'new' operator. Use the special object creation method instead.
  • V3206. Unity Engine. A direct call to the coroutine-like method will not start it. Use the 'StartCoroutine' method instead.
  • V4006. Unity Engine. Multiple operations between complex and numeric values. Prioritizing operations between numeric values can optimize execution time.

Java:

  • V6118. The original exception object was swallowed. Cause of original exception could be lost.
  • V6119. The result of '&' operator is always '0'.
  • V6120. The result of the '&' operator is '0' because one of the operands is '0'.
  • V6121. Return value is not always used. Consider inspecting the 'foo' method.
  • V6122. The 'Y' (week year) pattern is used for date formatting. Check whether the 'y' (year) pattern was intended instead.

Статьи

Для тех, кто пишет на C++:

Для тех, кто пишет на C#:

Для тех, кто пишет на Java:

Статьи общей тематики:

Вебинары

Заключительный из пяти вебинаров, посвящённых введённому в апреле этого года стандарту ГОСТ Р 71207-2024 о разработке безопасного ПО и статическом анализе. Почему обязательно регулярно запускать анализатор и смотреть на отчёты? Как часто это необходимо делать? Рассмотрим эти и другие требования стандарта для регулярного использования статических анализаторов в процессе разработки безопасного ПО.

А все предыдущие вебинары из этой серии можно посмотреть по этой ссылке.

Доклады

Семантика для кремниевых мозгов

В своём новом докладе Юрий Минаев рассказывает о семантике C++ с точки зрения статического анализатора или фронтенда компилятора, как устроена таблица символов, как выглядит внутреннее представление типов и как происходит поиск имён.

Разрушители мифов: C++ уже не торт

Язык программирования С++ существует уже больше 40 лет. За это время появилась целая куча мифов и небылиц о нём. Мы будем вместе опровергать или подтверждать их. Действительно ли С++ непрост для новичков? С++ устарел и больше никому не нужен? Эти и другие вопросы в докладе Филиппа Хандельянца.

Подкасты

Как узнать, что код "с душком"

Зачем надевать на разработчика ошейник и бить его по щекам? Сколько человек нужно, чтобы определиться, как правильно писать код? Как можно скрутить "пробег" у проекта? Как сделать GitHub лучше? Об этом и многом другом в выпуске подкаста "Скрамное ИТ" с участием Филиппа Хандельянца.

Статический анализ кода / Виды анализа и диагностики / Поиск кадров в регионах

О том, как начиналась разработка статического анализатора PVS-Studio и как работает наша команда сегодня Юрий Минаев и Андрей Карпов рассказали в подкасте "Битовые Маски".

Как айтишнику развить бизнес

Андрей Карпов побывал на подкасте "Алиса и тестирование", где участники поговорили о разработке, методах выявления ошибок в коде на ранних этапах, важности использования статического анализа для повышения качества ПО и внедрении современных методологий, таких как TDD и код-ревью, в повседневную работу.

Видео

В новых видео туториалах рассказали и показали, как использовать PVS-Studio в Visual Studio и SonarQube.

Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.

Если вы хотите получать новости о новых релизах, подпишитесь на рассылку от компании PVS-Studio по этой ссылке.