﻿# PVS\-Studio 7\.35: поддержка MISRA C 2023, плагин для Qt Creator 15 и многое другое

Вышел новый релиз PVS\-Studio — 7\.35\. Поддержка стандарта MISRA C, плагин для Qt Creator 15\.X, анализ модифицированных файлов в Visual Studio, и это далеко не всё\! Больше подробностей в этой заметке\.

![1225_press-release35_ru/image1.png](https://import.viva64.com/docx/blog/1225_press-release35_ru/image1.png)


> Загрузить актуальную версию PVS\\\-Studio можно \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/download/\)\\\.

**Покрытие стандарта MISRA C**

Мы начали работу по увеличению покрытия стандарта MISRA C\. Первые восемь диагностических правил уже были реализованы в релизе 7\.35\. Полный список будет приведён ниже\.

В этом году мы планируем покрыть не менее 85% стандарта MISRA C, а также поддержать последнюю версию MISRA C 2023\. 

Подробнее о классификации предупреждений PVS\-Studio согласно стандартам MISRA можно прочитать [здесь](https://pvs-studio.ru/ru/pvs-studio/sast/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 мы добавили ещё один вариант запуска этого режима: анализироваться будут файлы, изменившиеся с предыдущего запуска анализа, а также файлы, в которых уже имеются неисправленные предупреждения\. 

Подробнее об этом методе анализа можно прочитать [в документации](https://pvs-studio.ru/ru/docs/manual/0055/#modified_files)\.


> \*\*Примечание\\\.\*\* Недавно у нас вышла статья "\[Рецепты для регулярного статического анализа кода\]\(https://habr\.com/ru/companies/pvs\-studio/articles/879256/\)"\\\. В ней описаны возможные сценарии использования каждого из режимов анализа PVS\\\-Studio\\\. Рекомендуем ознакомиться\\\.



**Оптимизация C\# анализатора**

В C\# анализаторе был оптимизирован анализ блоков кода c большим количеством идентификаторов переменных \(500 и более\)\. Ранее были возможны замедления анализатора в подобных ситуациях\.


> А если вы занимаетесь разработкой под Unity и хотите оптимизировать свой проект, то советуем ознакомиться со статей "\[PVS\\\-Studio помогает оптимизировать проекты на Unity Engine\]\(https://pvs\-studio\.ru/ru/blog/posts/csharp/1071/\)"\\\.



**Java и OWASP**

С релиза 7\.34 в рамках Java анализатора был взят курс на информационную безопасность\. И к релизу 7\.35 мы покрываем 7 из 10 категорий OWASP Top Ten 2021\. 

На данный момент мы умеем находить уязвимости из следующих категорий:

* [A01:2021\-Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/);
* [A02:2021\-Cryptographic Failures](https://owasp.org/Top10/A02_2021-Cryptographic_Failures/);
* [A03:2021\-Injection](https://owasp.org/Top10/A03_2021-Injection/);
* [A04:2021\-Insecure Design](https://owasp.org/Top10/A04_2021-Insecure_Design/);
* [A05:2021\-Security Misconfiguration](https://owasp.org/Top10/A05_2021-Security_Misconfiguration/);
* [A07:2021\-Identification and Authentication Failures](https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/);
* [A09:2021\-Security Logging and Monitoring Failures](https://owasp.org/Top10/A09_2021-Security_Logging_and_Monitoring_Failures/)\.

В следующих релизах мы продолжим реализовывать диагностики, обнаруживающие потенциальные уязвимости из перечня OWASP Top Ten\.


> Посмотреть, как PVS\\\-Studio покрывает OWASP Top Ten 2021 для C\\\+\\\+, C\\\# и Java можно \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/sast/owasptopten/\)\\\.



**Breaking Changes**

Эти изменения ломают обратную совместимость с предыдущими версиями анализатора\. Из\-за этого вам может потребоваться изменить способ использования анализатора\.

Изменения в Java\-анализаторе:

* исправлено ошибочное поведение при использовании аргументов `--license-path` в ядре Java анализатора и `licensePath` в плагинах PVS\-Studio для Maven и Gradle\. Теперь информация о лицензии записывается по указанному в параметре пути, а не по стандартному месту расположения лицензии\. Подробнее можно прочитать [в документации](https://pvs-studio.ru/ru/docs/manual/6703/#ID442EF446EF);
* в версии 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`:

* изменился внутренний формат записи [кэшей зависимостей компиляции](https://pvs-studio.ru/ru/docs/manual/0055/#modified_files)\. Обратная совместимость со старым форматом сохранена\.

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

C, C\+\+:

* [V2626](https://pvs-studio.ru/ru/docs/warnings/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](https://pvs-studio.ru/ru/docs/warnings/v2627/)\. MISRA C 2023 17\.13\. Function type should not be type qualified\.
* [V2628](https://pvs-studio.ru/ru/docs/warnings/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](https://pvs-studio.ru/ru/docs/warnings/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](https://pvs-studio.ru/ru/docs/warnings/v2630/)\. MISRA C 2023 6\.3\. Bit field should not be declared as a member of a union\.
* [V2631](https://pvs-studio.ru/ru/docs/warnings/v2631/)\. MISRA C 2023 18\.10\. Pointers to variably\-modified array types should not be used\.
* [V2632](https://pvs-studio.ru/ru/docs/warnings/v2632/)\. MISRA C 2023 18\.9\. Object with temporary lifetime should not undergo array\-to\-pointer conversion\.
* [V2633](https://pvs-studio.ru/ru/docs/warnings/v2633/)\. MISRA C 2023 5\.5\. Identifiers should be distinct from macro names\.

C\#:

* [V3211](https://pvs-studio.ru/ru/docs/warnings/v3211/)\. Unity Engine\. The operators '?\.', '??' and '??\=' do not correctly handle destroyed objects derived from 'UnityEngine\.Object'\. 
* [V3212](https://pvs-studio.ru/ru/docs/warnings/v3212/)\. Unity Engine\. Pattern matching does not correctly handle destroyed objects derived from 'UnityEngine\.Object'\.
* [V3213](https://pvs-studio.ru/ru/docs/warnings/v3213/)\. Unity Engine\. The 'GetComponent' method must be instantiated with a type that inherits from 'UnityEngine\.Component'\.
* [V3214](https://pvs-studio.ru/ru/docs/warnings/v3214/)\. Unity Engine\. Using Unity API in the background thread may result in an error\.
* [V3215](https://pvs-studio.ru/ru/docs/warnings/v3215/)\. Unity Engine\. Passing a method name as a string literal into the 'StartCoroutine' is unreliable\.
* [V3216](https://pvs-studio.ru/ru/docs/warnings/v3216/)\. Unity Engine\. Checking a field for null may not work correctly due to implicit field initialization by the engine\.
* [V3217](https://pvs-studio.ru/ru/docs/warnings/v3217/)\. Possible overflow as a result of an arithmetic operation\.
* [V4008](https://pvs-studio.ru/ru/docs/warnings/v4008/)\. Unity Engine\. Avoid using memory allocation Physics APIs in performance\-sensitive context\.

Java:

* [V5310](https://pvs-studio.ru/ru/docs/warnings/v5310/)\. OWASP\. Possible command injection\. Potentially tainted data is used to create OS command\.
* [V5311](https://pvs-studio.ru/ru/docs/warnings/v5311/)\. OWASP\. Possible argument injection\. Potentially tainted data is used to create OS command\.
* [V5312](https://pvs-studio.ru/ru/docs/warnings/v5312/)\. OWASP\. Possible XPath injection\. Potentially tainted data is used to create XPath expression\.
* [V5313](https://pvs-studio.ru/ru/docs/warnings/v5313/)\. OWASP\. Do not use the old versions of SSL/TLS protocols as it may cause security issues\.
* [V5314](https://pvs-studio.ru/ru/docs/warnings/v5314/)\. OWASP\. Use of an outdated hash algorithm is not recommended\.
* [V5315](https://pvs-studio.ru/ru/docs/warnings/v5315/)\. OWASP\. Use of an outdated cryptographic algorithm is not recommended\.
* [V5316](https://pvs-studio.ru/ru/docs/warnings/v5316/)\. OWASP\. Do not use the 'HttpServletRequest\.getRequestedSessionId' method because it uses a session ID provided by a client\.
* [V5317](https://pvs-studio.ru/ru/docs/warnings/v5317/)\. OWASP\. Implementing a cryptographic algorithm is not advised because an attacker might break it\.
* [V5318](https://pvs-studio.ru/ru/docs/warnings/v5318/)\. OWASP\. Setting POSIX file permissions to 'all' or 'others' groups can lead to unintended access to files or directories\.
* [V5319](https://pvs-studio.ru/ru/docs/warnings/v5319/)\. OWASP\. Possible log injection\. Potentially tainted data is written into logs\.

**Анонс нового вебинара**

![1225_press-release35_ru/image2.png](https://import.viva64.com/docx/blog/1225_press-release35_ru/image2.png)

**C\+\+ и неопределённое поведение**

Мы пригласили в гости Дмитрия Свиридкина — автора книги "Путеводитель C\+\+ программиста по неопределённому поведению"\. Обсудим грани, отделяющие корректный C\+\+ код от некорректного, попросим рассказать историю написания книги, а также поговорим о развитии языка и его будущем\.

Дата проведения: 27 февраля 14:00

Регистрация доступна по [ссылке](https://pvs-studio.ru/ru/webinar/)\.

**Статьи**

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

* [Путеводитель C\+\+ программиста по неопределённому поведению: часть 11 из 11](https://pvs-studio.ru/ru/blog/posts/cpp/1199/);
* [Как сторонние библиотеки меняют правила анализа кода](https://pvs-studio.ru/ru/blog/posts/cpp/1201/);
* [Судный день: топ\-10 ошибок в C и C\+\+ проектах за 2024 год](https://pvs-studio.ru/ru/blog/posts/cpp/1208/);
* [Путеводитель C\+\+ программиста по неопределённому поведению: часть 12 из 11](https://pvs-studio.ru/ru/blog/posts/cpp/1211/);
* [О том, как легкомысленное использование полиморфных аллокаторов может испортить вам жизнь](https://pvs-studio.ru/ru/blog/posts/cpp/1212/);
* [PPSSPP или всё же psp? Смотрим баги в коде из прошлого](https://pvs-studio.ru/ru/blog/posts/cpp/1217/);
* [Первая часть исследования Nau Engine](https://pvs-studio.ru/ru/blog/posts/cpp/1221/)\.
* [История C и C\+\+\. Часть вторая: стандартизация C и C\+\+, Qt, Clang, Unreal Engine](https://pvs-studio.ru/ru/blog/posts/cpp/1224/)\.

Не могу не отметить, что длинная и интересная эпопея со статьями про неопределённое поведение в этом релизе подошла к концу\. Отдельно оставлю ссылку на статью\-агрегатор, по которой удобно осуществлять навигацию между разными частями книги:

[Путеводитель C\+\+ программиста по неопределённому поведению\.](https://pvs-studio.ru/ru/blog/posts/cpp/1215/)

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

* [Топ\-10 ошибок, найденных в C\# проектах за 2024 год](https://pvs-studio.ru/ru/blog/posts/csharp/1203/);
* [Как обновить библиотеку и утонуть в задаче\. Обновление Roslyn и PVS\-Studio 7\.34](https://pvs-studio.ru/ru/blog/posts/csharp/1206/);
* [\.NET Digest \#5](https://pvs-studio.ru/ru/blog/posts/csharp/1209/);
* [Ода одной диагностике и ещё парочке, или проверка Jellyfin](https://pvs-studio.ru/ru/blog/posts/csharp/1210/);
* [Ошибки и подозрительные места в исходниках \.NET 9](https://pvs-studio.ru/ru/blog/posts/csharp/1216/);
* [В Microsoft тоже ошибаются\. Проверяем MSBuild](https://pvs-studio.ru/ru/blog/posts/csharp/1222/)\.

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

* [10 самых интересных ошибок в Java проектах за 2024 год](https://pvs-studio.ru/ru/blog/posts/java/1207/);
* [Java, Taint и SAST: что это и зачем, и причём здесь ГОСТ 71207](https://pvs-studio.ru/ru/blog/posts/java/1214/);
* [Как уронить Minecraft своим модом](https://pvs-studio.ru/ru/blog/posts/java/1219/)\.

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

* [Новые диагностические правила в PVS\-Studio 7\.34](https://pvs-studio.ru/ru/blog/posts/1202/);
* [PVS\-Studio соответствует требованиям ГОСТ Р 71207—2024 \(статический анализ программного обеспечения\)](https://pvs-studio.ru/ru/blog/posts/1204/);
* [Как мы добавляли поддержку Apple Silicon в анализатор \(arm64\)](https://pvs-studio.ru/ru/blog/posts/1205/);
* [Рецепты для регулярного статического анализа кода](https://pvs-studio.ru/ru/blog/posts/1218/);
* [Распределённая сборка Unreal Engine проектов с помощью Horde и UBA](https://pvs-studio.ru/ru/blog/posts/1220/)\.

Ну и хотелось бы отдельно вынести статью, в которой мы рассказали про наши изменения за прошедший год: [PVS\-Studio в 2024 году](https://pvs-studio.ru/ru/blog/posts/1213/)\.

**Вебинары**

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

<https://vk.com/video_ext.php?oid=-11805870&id=456239511&hash=1463d25d4ad10edb>

**Видео**

**Использование расширения PVS\-Studio для Visual Studio Code**

В этом релизе мы выпустили видео\-туториал, в котором подробно показали, как вы можете пользоваться нашим расширением для Visual Studio Code, а именно:

* как установить расширение;
* запуск анализа CMake, MSBuild и Java проектов;
* работа с результатами анализа\.

Ознакомиться можно по ссылке:

<https://vk.com/video_ext.php?oid=-11805870&id=456239519&hash=8a32f84a79479df8>

Также этот видео\-туториал доступен в документации "[Использование расширения PVS\-Studio для Visual Studio Code](https://pvs-studio.ru/ru/docs/manual/6646/)"\.

**Критические ошибки**

В этом видео мы кратко рассказали, что такое критическая ошибка по ГОСТ Р 71207\-2024, и какие категории критических ошибок существуют\. Было тяжело, но мы уместили тезисы из такой ёмкой темы в видео короткого формата\.

<https://vk.com/video_ext.php?oid=-11805870&id=456239516&hash=fbe5beb910a1a6c2>



**"Вредные советы для C\+\+ программиста" в PDF**

Теперь книга Андрея Карпова "Вредные советы для C\+\+ программиста" доступна в PDF\. В ней в юмористическом формате разбираются реальные ситуации из практики программирования на C\+\+, которые лучше избегать\. 

Условия получения электронной версии книги достаточно простые: подписаться на наш дайджест статей или Telegram бот\. Все подробности по [ссылке](https://pvs-studio.ru/ru/book-giveaway/)\.


> Хотите проверить свой проект с помощью PVS\\\-Studio? Начните с этой \[страницы\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.



Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS\-Studio по [ссылке](https://pvs-studio.ru/ru/subscribe/)\.