Вышел новый релиз PVS-Studio — 7.35. Поддержка стандарта MISRA C, плагин для Qt Creator 15.X, анализ модифицированных файлов в Visual Studio, и это далеко не всё! Больше подробностей в этой заметке.
Загрузить актуальную версию PVS-Studio можно здесь.
Покрытие стандарта MISRA C
Мы начали работу по увеличению покрытия стандарта MISRA C. Первые восемь диагностических правил уже были реализованы в релизе 7.35. Полный список будет приведён ниже.
В этом году мы планируем покрыть не менее 85% стандарта MISRA C, а также поддержать последнюю версию MISRA C 2023.
Подробнее о классификации предупреждений PVS-Studio согласно стандартам MISRA можно прочитать здесь.
Поддержка плагина для Qt Creator версий 15.x и отказ от поддержки 9.x версий
Теперь плагин PVS-Studio стал доступен для Qt Creator версий 15.x.
В Qt Creator версии 15.0.0 возникает проблема при установке плагинов для конкретного пользователя с помощью "мастера установки". Путь, по которому устанавливаются плагины, не совпадает с путём, по которому эти плагины ищутся. Эта проблема исправлена с версии Qt Creator 15.0.1.
Также прекращена поддержка плагина для версий Qt Creator 9.x. Мы стараемся обеспечивать поддержку всех актуальных версий Qt Creator, вплоть до релизов двухгодичной давности.
Режим анализа модифицированных файлов добавлен в плагин для Visual Studio
Режим анализа модифицированных файлов был добавлен в плагин для Visual Studio. Он может быть полезен, когда нужно проанализировать только те файлы, которые были изменены относительно сохраненного состояния директории проекта.
Данный режим является альтернативой инкрементальному анализу и может быть полезен при проверке Pull Request'ов.
Также в релизе 7.35 мы добавили ещё один вариант запуска этого режима: анализироваться будут файлы, изменившиеся с предыдущего запуска анализа, а также файлы, в которых уже имеются неисправленные предупреждения.
Подробнее об этом методе анализа можно прочитать в документации.
Примечание. Недавно у нас вышла статья "Рецепты для регулярного статического анализа кода". В ней описаны возможные сценарии использования каждого из режимов анализа PVS-Studio. Рекомендуем ознакомиться.
Оптимизация C# анализатора
В C# анализаторе был оптимизирован анализ блоков кода c большим количеством идентификаторов переменных (500 и более). Ранее были возможны замедления анализатора в подобных ситуациях.
А если вы занимаетесь разработкой под Unity и хотите оптимизировать свой проект, то советуем ознакомиться со статей "PVS-Studio помогает оптимизировать проекты на Unity Engine".
Java и OWASP
С релиза 7.34 в рамках Java анализатора был взят курс на информационную безопасность. И к релизу 7.35 мы покрываем 7 из 10 категорий OWASP Top Ten 2021.
На данный момент мы умеем находить уязвимости из следующих категорий:
A01:2021-Broken Access Control;
A02:2021-Cryptographic Failures;
A03:2021-Injection;
A04:2021-Insecure Design;
A05:2021-Security Misconfiguration;
A07:2021-Identification and Authentication Failures;
A09:2021-Security Logging and Monitoring Failures.
В следующих релизах мы продолжим реализовывать диагностики, обнаруживающие потенциальные уязвимости из перечня OWASP Top Ten.
Посмотреть, как PVS-Studio покрывает OWASP Top Ten 2021 для C++, C# и Java можно здесь.
Breaking Changes
Эти изменения ломают обратную совместимость с предыдущими версиями анализатора. Из-за этого вам может потребоваться изменить способ использования анализатора.
Изменения в Java-анализаторе:
исправлено ошибочное поведение при использовании аргументов --license-path в ядре Java анализатора и licensePath в плагинах PVS-Studio для Maven и Gradle. Теперь информация о лицензии записывается по указанному в параметре пути, а не по стандартному месту расположения лицензии. Подробнее можно прочитать в документации;
в версии 7.34 было ошибочно изменено поведение анализатора при отсутствии срабатывания в отчёте. В текущей версии возвращено создание пустого suppress-файла, если в передаваемом на подавление отчёте (с помощью флага --convert в значении toSuppress) нет срабатываний.
Изменение для C, C++ анализатора:
ядро C и C++ анализатора теперь выдает SAST-идентификатор с указанием версии стандарта MISRA (2012 или 2023) в срабатываниях диагностических правил группы MISRA.
Изменение для MSBuild С, С++ и С# проектов на Windows, запускаемых утилитой PVS-Studio_Cmd.exe, и для С# проектов на Linux/macOS, запускаемых с помощью утилиты pvs-studio-dotnet:
изменился внутренний формат записи кэшей зависимостей компиляции. Обратная совместимость со старым форматом сохранена.
Новые диагностические правила
C, C++:
V2626. MISRA C 2023 12.5. The sizeof operator should not have an operand which is a function parameter declared as 'array of type'.
V2627. MISRA C 2023 17.13. Function type should not be type qualified.
V2628. MISRA C 2023 21.15. Pointer arguments to the Standard Library function 'Foo' should be pointers to qualified or unqualified versions of compatible types.
V2629. MISRA C 2023 21.16. Pointer arguments to the Standard Library function memcmp should point to either a pointer type, an essentially signed type, an essentially unsigned type, an essentially Boolean type or an essentially enum type.
V2630. MISRA C 2023 6.3. Bit field should not be declared as a member of a union.
V2631. MISRA C 2023 18.10. Pointers to variably-modified array types should not be used.
V2632. MISRA C 2023 18.9. Object with temporary lifetime should not undergo array-to-pointer conversion.
V2633. MISRA C 2023 5.5. Identifiers should be distinct from macro names.
C#:
V3211. Unity Engine. The operators '?.', '??' and '??=' do not correctly handle destroyed objects derived from 'UnityEngine.Object'.
V3212. Unity Engine. Pattern matching does not correctly handle destroyed objects derived from 'UnityEngine.Object'.
V3213. Unity Engine. The 'GetComponent' method must be instantiated with a type that inherits from 'UnityEngine.Component'.
V3214. Unity Engine. Using Unity API in the background thread may result in an error.
V3215. Unity Engine. Passing a method name as a string literal into the 'StartCoroutine' is unreliable.
V3216. Unity Engine. Checking a field for null may not work correctly due to implicit field initialization by the engine.
V3217. Possible overflow as a result of an arithmetic operation.
V4008. Unity Engine. Avoid using memory allocation Physics APIs in performance-sensitive context.
Java:
V5310. OWASP. Possible command injection. Potentially tainted data is used to create OS command.
V5311. OWASP. Possible argument injection. Potentially tainted data is used to create OS command.
V5312. OWASP. Possible XPath injection. Potentially tainted data is used to create XPath expression.
V5313. OWASP. Do not use the old versions of SSL/TLS protocols as it may cause security issues.
V5314. OWASP. Use of an outdated hash algorithm is not recommended.
V5315. OWASP. Use of an outdated cryptographic algorithm is not recommended.
V5316. OWASP. Do not use the 'HttpServletRequest.getRequestedSessionId' method because it uses a session ID provided by a client.
V5317. OWASP. Implementing a cryptographic algorithm is not advised because an attacker might break it.
V5318. OWASP. Setting POSIX file permissions to 'all' or 'others' groups can lead to unintended access to files or directories.
V5319. OWASP. Possible log injection. Potentially tainted data is written into logs.
Анонс нового вебинара
C++ и неопределённое поведение
Мы пригласили в гости Дмитрия Свиридкина — автора книги "Путеводитель C++ программиста по неопределённому поведению". Обсудим грани, отделяющие корректный C++ код от некорректного, попросим рассказать историю написания книги, а также поговорим о развитии языка и его будущем.
Дата проведения: 27 февраля 14:00
Регистрация доступна по ссылке.
Статьи
Для тех, кто пишет на C++:
Путеводитель C++ программиста по неопределённому поведению: часть 11 из 11;
Как сторонние библиотеки меняют правила анализа кода;
Судный день: топ-10 ошибок в C и C++ проектах за 2024 год;
Путеводитель C++ программиста по неопределённому поведению: часть 12 из 11;
О том, как легкомысленное использование полиморфных аллокаторов может испортить вам жизнь;
PPSSPP или всё же psp? Смотрим баги в коде из прошлого;
Первая часть исследования Nau Engine.
История C и C++. Часть вторая: стандартизация C и C++, Qt, Clang, Unreal Engine.
Не могу не отметить, что длинная и интересная эпопея со статьями про неопределённое поведение в этом релизе подошла к концу. Отдельно оставлю ссылку на статью-агрегатор, по которой удобно осуществлять навигацию между разными частями книги:
Путеводитель C++ программиста по неопределённому поведению.
Для тех, кто пишет на C#:
Топ-10 ошибок, найденных в C# проектах за 2024 год;
Как обновить библиотеку и утонуть в задаче. Обновление Roslyn и PVS-Studio 7.34;
.NET Digest #5;
Ода одной диагностике и ещё парочке, или проверка Jellyfin;
Ошибки и подозрительные места в исходниках .NET 9;
В Microsoft тоже ошибаются. Проверяем MSBuild.
Для тех, кто пишет на Java:
10 самых интересных ошибок в Java проектах за 2024 год;
Java, Taint и SAST: что это и зачем, и причём здесь ГОСТ 71207;
Как уронить Minecraft своим модом.
Статьи общей тематики:
Новые диагностические правила в PVS-Studio 7.34;
PVS-Studio соответствует требованиям ГОСТ Р 71207—2024 (статический анализ программного обеспечения);
Как мы добавляли поддержку Apple Silicon в анализатор (arm64);
Рецепты для регулярного статического анализа кода;
Распределённая сборка Unreal Engine проектов с помощью Horde и UBA.
Ну и хотелось бы отдельно вынести статью, в которой мы рассказали про наши изменения за прошедший год: PVS-Studio в 2024 году.
Вебинары
В апреле 2024 года вышел ГОСТ Р 71207-2024, посвящённый разработке безопасного программного обеспечения, а точнее использованию статических анализаторов в этом процессе. Мы провели вебинар, в котором рассказали, что этот стандарт регулирует, и что нужно изменить в рабочем процессе, чтобы ему соответствовать.
Видео
Использование расширения PVS-Studio для Visual Studio Code
В этом релизе мы выпустили видео-туториал, в котором подробно показали, как вы можете пользоваться нашим расширением для Visual Studio Code, а именно:
как установить расширение;
запуск анализа CMake, MSBuild и Java проектов;
работа с результатами анализа.
Ознакомиться можно по ссылке:
Также этот видео-туториал доступен в документации "Использование расширения PVS-Studio для Visual Studio Code".
Критические ошибки
В этом видео мы кратко рассказали, что такое критическая ошибка по ГОСТ Р 71207-2024, и какие категории критических ошибок существуют. Было тяжело, но мы уместили тезисы из такой ёмкой темы в видео короткого формата.
"Вредные советы для C++ программиста" в PDF
Теперь книга Андрея Карпова "Вредные советы для C++ программиста" доступна в PDF. В ней в юмористическом формате разбираются реальные ситуации из практики программирования на C++, которые лучше избегать.
Условия получения электронной версии книги достаточно простые: подписаться на наш дайджест статей или Telegram бот. Все подробности по ссылке.
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS-Studio по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Vladislav Bogdanov. PVS-Studio 7.35: MISRA C 2023 support, Qt Creator 15 plugin, and more.
Источник новости: habr.com