1000_Release_7_21_ru/image1.png


Вышел новый релиз PVS-Studio – 7.21. В этой заметке описали основные улучшения анализатора и собрали материалы от нашей команды, вышедшие в последнее время: статьи, опросы и записи докладов с конференций.


Загрузить PVS-Studio 7.21 можно тут. Если нет лицензионного ключа, получить триал можно здесь.


Итак, что же нового?


Отчёты PVS-Studio, совместимые с GitLab Code Quality


1000_Release_7_21_ru/image2.png


Результаты работы PVS-Studio теперь можно сконвертировать в отчёт, совместимый с GitLab Code Quality. Это поможет следить за качеством проекта в рамках экосистемы GitLab.


В документации по использованию PVS-Studio в GitLab CI/CD описали, как получить такой отчёт.


Более тесная интеграция с Unreal Engine


Мы продолжаем развивать поддержку проектов на основе Unreal Engine. В этот раз сразу три новости:


  1. Научили анализатор понимать ещё больше типов, специфичных для Unreal Engine проектов. Хороших срабатываний должно стать больше, ложных – меньше.
  2. В документации описали, как с помощью PVS-Studio проверять Unreal Engine проекты под Linux.
  3. Сделали pull request, который позволит использовать больше настроек анализатора при работе с UE-проектами. Например, указывать таймаут для анализа файлов. Изменения уже закоммичены в код движка и будут доступны в следующей версии Unreal Engine.

Улучшение кроссплатформенных сценариев работы


Плагин PVS-Studio для Visual Studio теперь умеет работать с файлами подавления в формате JSON (ранее формат поддерживался только утилитах в Linux и macOS). Это упрощает кроссплатформенные сценарии работы с подавленными предупреждениями. Внедрить PVS-Studio в кроссплатформенные проекты с legacy-кодом также станет легче.


Новые возможности подавления предупреждений


Теперь вы можете автоматически фильтровать предупреждения анализатора, сообщения которых содержат определённый текст. Это позволит под��влять предупреждения по шаблону, не отключая диагностики целиком. Описать такой фильтр можно в .pvsconfig-файлах (C++, C#) или прямо в коде (только C++).


Рассмотрим пример. Диагностика V3022 C# анализатора PVS-Studio выдаёт предупреждение, если выражение в коде всегда истинно или ложно.


Взглянем на фрагмент кода:


static void ProcessStr(String str)
{
  if (str == "temp")
  {
    if (str.Length != 0) // V3022 (expression is always true)
      ....

    if (str.Length == 0) // V3022 (expression is always false)
      ....
  }
}

Допустим, мы не хотим выключать диагностику V3022 целиком, но хотим видеть только предупреждения на условия, которые всегда ложны. Для этого достаточно записать в .pvsconfig-файл такой фильтр:


//-V::3022::{always true}

PVS-Studio отфильтрует предупреждения V3022, которые содержат текст "always true". На примере кода выше первое предупреждение пропадёт, а второе останется.


Документация по файлам конфигурации диагностик (.pvsconfig)


Файлы конфигурации диагностик позволяют конфигурировать поведение анализатора, например:


  • изменить уровень диагностик;
  • исключить из результатов анализа предупреждения по определённому паттерну;
  • изменить текст предупреждения и т.п.

В новом разделе документации мы описали все возможности .pvsconfig-файлов и способы работы с ними в разном окружении.


Новые диагностики


C, C++


  • V1090. The 'std::uncaught_exception' function is deprecated since C++17 and is removed in C++20. Consider replacing this function with 'std::uncaught_exceptions'.
  • V1091. The pointer is cast to an integer type of a larger size. Casting pointer to a type of a larger size is an implementation-defined behavior.
  • V1092. Recursive function call during the static/thread_local variable initialization might occur. This may lead to undefined behavior.

C#


  • V3178. Calling method or accessing property of potentially disposed object may result in exception.
  • V3179. Calling element access method for potentially empty collection may result in exception.
  • V3180. The 'HasFlag' method always returns 'true' because the value '0' is passed as its argument.
  • V3181. The result of '&' operator is '0' because one of the operands is '0'.
  • V3182. The result of '&' operator is always '0'.

Интерактив


Сделали опрос "Кто ты в мире C#". Пройти его можно здесь.


1000_Release_7_21_ru/image3.png


Кстати, напишите, если сможете пройти тест не на результат "Ты сборщик мусора". Или мне так не везёт, или наша C# команда всех затроллить решила… :)


Если вы пропустили другие интерактивы, вот они:


  • опрос "Кто ты в мире C++";
  • игра "Поиск ошибок в коде на C#";
  • игра "Поиск ошибок в коде на C++".

Статьи


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


  • Топ-10 докладов на С++ конференциях 2019-2022 года (ссылка);
  • Есть ли жизнь без RTTI: пишем свой dynamic_cast (ссылка);
  • Боремся с 16-летним легаси-кодом, или исправляем C и C++ front-end в PVS-Studio (ссылка);
  • Интервью с Джейсоном Тернером, одним из ведущих подкаста "CppCast": история и причины закрытия проекта (ссылка).

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


  • Сортировки в C#: OrderBy.OrderBy или OrderBy.ThenBy? Разбираемся, что эффективнее и почему (ссылка);
  • Особенности реализации List в C# (ссылка);
  • Чем опасны уязвимые зависимости в проекте и как с этим помогает SCA? (ссылка);
  • Планируете взяться за .NET MAUI? Будьте готовы к приключениям с NullReferenceException (ссылка).

Поиск ошибок в коде проектов:


  • игровой движок Stride (C#): ссылка;
  • фреймворк машинного обучения ML.NET (C#): ссылка;
  • сборочная система MSBuild (C#): ссылка;
  • фреймворк и CMS Orchard Core (C#): ссылка;
  • JavsScript-движок Rhino (Java): ссылка.

Доклады


В сеть выложили записи докладов с конференции DotNext 2022 Spring. Полный список записей доступен здесь.


1000_Release_7_21_ru/image4.png


От нашей команды на конференции было 2 доклада, и оба посвящены вопросам безопасности:


  • Никита Липилин: SAST и SCA: поиск дефектов безопасности в коде проекта и его зависимостях. Ссылка.
  • Сергей Васильев: Обработка XML-файлов как причина появления уязвимостей. Ссылка.

Ещё одна конференция, доклады с которой стали доступны – Heisenbug 2022 Spring. Полный список записей докладов – здесь.


1000_Release_7_21_ru/image5.png


Доклады от нашей команды:


  • Сергей Васильев: Как устроено тестирование средства статического тестирования. Ссылка.
  • Сергей Васильев: Правильно ли вы парсите XML? Разбираемся с уязвимостями. Ссылка.