Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
PVS-Studio 7.21: GitLab Code Quality, U…

PVS-Studio 7.21: GitLab Code Quality, Unreal Engine

19 Окт 2022

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

1000_Release_7_21_ru/image1.png

Загрузить 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. В этот раз сразу три новости:

  • Научили анализатор понимать ещё больше типов, специфичных для Unreal Engine проектов. Хороших срабатываний должно стать больше, ложных – меньше.
  • В документации описали, как с помощью PVS-Studio проверять Unreal Engine проекты под Linux.
  • Сделали 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? Разбираемся с уязвимостями. Ссылка.
Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам