Вышел новый релиз PVS-Studio — 7.28. Теперь можно запускать анализ на архитектуре ARM, .NET 8 и в Unreal Engine без Unity Build, и это ещё не всё! Больше подробностей в этом пресс-релизе.
Загрузить актуальную версию PVS-Studio можно здесь.
Поддержка архитектуры ARM
В анализатор PVS-Studio добавлена поддержка работы на платформе ARM на операционной системе Windows. Поддержка работает в режиме совместимости с архитектурой x64.
В следующем году планируется реализация нативной ARM версии анализатора для операционных систем семейства macOS.
Поддержка анализа проектов на .NET 8
В PVS-Studio C# поддержали анализ проектов, использующих .NET 8.
Сам C# анализатор под Linux и macOS теперь работает на .NET 8.
Анализ Unreal Engine проектов без Unity Build
При проверке Unreal Engine проектов с помощью PVS-Studio зачастую возникают проблемы с избыточным потреблением памяти и замедлением анализа, вызываемые использованием системы объединения единиц трансляции в один файл (Unity Build).
Несмотря на то что использование такой системы может положительно сказаться на времени компиляции, большой размер файла может привести к повышенному потреблению ресурсов, необходимых для анализа.
Мы дополнили документацию по анализу Unreal Engine проектов пунктом про настройку запуска анализа без использования Unity Build, но с возможностью использования этого режима для сборки проекта.
Поддержка относительных путей в SARIF
Отчеты в формате SARIF получили поддержку относительных путей до анализируемых файлов согласно документации стандарта.
Более подробно про отчеты в формате SARIF можно прочитать в документации.
Использование wildcard-паттернов в CLMonitor
Теперь CLMonitor (утилита мониторинга сборок на Windows) поддерживает wildcard-паттерны в командах компиляции.
Более подробно про использование утилиты CLMonitor можно прочитать в документации.
Доработка .pvsconfig в C# анализаторе
В C# анализаторе доработана и унифицирована с другими анализаторами возможность включения и отключения отдельных диагностик с помощью файлов настройки анализатора .pvsconfig.
Пример:
//-V::3022,5623:1,3
Эта запись позволит исключить срабатывания диагностик V3022 и V5623 уровня 'High' и 'Low'.
Более подробно про использование файлов конфигурации диагностик .pvsconfig можно прочитать в документации.
Улучшение диагностики в C# анализаторе
В C# анализаторе улучшена работа с параметрами, имеющими null в качестве значения по умолчанию.
Это позволяет диагностике V3080 находить больше проблем, связанных с разыменованием нулевых ссылок.
Рассмотрим пример из реального проекта, что теперь может обнаружить анализатор:
public MyEffectInstance CreateEffect(
IMySourceVoice input,
MyStringHash effect,
MySourceVoice[] cues = null, // <=
float? duration = null)
{
if(!m_effects.ContainsKey(effect))
{
Debug.Fail(string.Format("Effect not found: {0}", effect.ToString()));
return null;
}
var instance = new MyEffectInstance
(m_effects[effect], input, cues, duration, m_engine); // <=
m_activeEffects.Add(instance);
return instance;
}
public MyEffectInstance(
MyAudioEffect effect,
IMySourceVoice input,
MySourceVoice[] cues,
float? duration,
XAudio2 engine)
{
m_engine = engine;
m_effect = effect;
var inputSound = input as MySourceVoice;
....
foreach(var sound in cues) // <=
{
....
}
}
Подозрительный код на одной из старых версий проекта Space Engineers.
В методе CreateEffect параметр cues имеет значение по умолчанию null, но при создании объекта класса MyEffectInstance производится обход массива cues в цикле foreach(var sound in cues).
Вследствие чего, если параметр cues имеет значение по умолчанию, то во время создания объекта класса при входе в цикл будет обращение по нулевой ссылке с выбросом исключения NullReferenceException.
Исправлена проблема совместной работы PVS-Studio и Visual Assist
При работе одновременно с плагином PVS-Studio и Visual Assist наблюдались проблемы с переключением между файлами в Visual Studio 2019 и 2022.
Больше этих проблем нет, мы всё исправили :).
Новые диагностики
С++
V1103. The values of padding bytes are unspecified. Comparing objects with padding using 'memcmp' may lead to unexpected result.
V2624. MISRA. The initializer for an aggregate or union should be enclosed in braces.
C#
V3193. Data processing results are potentially used before asynchronous output reading is complete. Consider calling 'WaitForExit' overload with no arguments before using the data.
V4005. Unity Engine. The expensive operation is performed inside method or property. Using such member in performance-sensitive context can lead to decreased performance.
Java
V6107. The constant NN is being utilized. The resulting value could be inaccurate. Consider using the KK constant.
Конкурс для C++ программистов и их любимых багов
В этом релизе команда PVS-Studio подготовила для вас новый конкурс с призами!
Для участия нужно вспомнить свой самый эпичный, мемный или глупый фейл при написании кода. Отправьте его нам до 30 декабря через специальную форму на этой странице и ждите подведения итогов в январе. Авторы 10 самых прикольных, крутых или глупых фейлов получат уникальную книгу "Вредные советы для C++ программистов" с подписью автора.
BeardyCast
Недавно часть нашей команды приняла участие в подкасте BeardyCast! Тимлид C++ Филипп Хандельянц и C# разработчик Никита Паневин вместе с ведущим обсудили темы статического анализа, качества кода и как в этом помогает статический анализатор PVS-Studio. Отдельное внимание уделено особенностям PVS-Studio, вопросу встраивания и интеграции статического анализа в процесс разработки.
Советуем послушать:
Кошмар на улице багов
Так сложилось, что в даты релиза попал Хэллоуин! Хоть он и прошел, но страшные баги никуда не делись! Сможете их найти?
Мы предлагаем вам попробовать себя в качестве охотников за привидениями! Мы собрали для вас 8 страшных историй — прочитайте их и попробуйте найти затаившиеся там баги.
Статьи
Для тех, кто пишет на C++
Для тех, кто пишет на C#
Использование расширения VS Code "PVS-Studio" для эффективной борьбы с ошибками в C# коде
Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity
Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками
Для тех, кто пишет на Java
Статьи общей тематики
Какую статью хочется прочитать в нашем блоге на тему C++, C# или Java?
Интервью с разработчиками мультитула для хакеров и пентестеров Flipper Zero
День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами. Часть 1
День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами. Часть 2
Доклады
Наша команда активно участвует в конференциях и митапах. В этом релизе C# разработчик Глеб Асламов выступил на конференции SQA Days 33 с докладом "SAST как этап цикла безопасной разработки"!
В докладе поднимаются темы качества и безопасности кода, и как в этом могут помочь инструменты статического анализа.
Советуем посмотреть:
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
А ещё у нас появилась рассылка с IT-ивентами для разработчиков! На неё и другие рассылки вы можете подписаться по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Gleb Aslamov. PVS-Studio 7.28: support for ARM, .NET 8, analysis of Unreal Engine projects without Unity Build, and more.