﻿# PVS\-Studio 7\.36: расширение поддержки MISRA, плагин для Qt Creator 16, расширение пользовательских аннотаций в C\#

Вышел новый релиз PVS\-Studio — 7\.36\. Встречайте расширение поддержки MISRA, плагин для Qt Creator 16, расширение пользовательских аннотаций в C\# и ещё много других обновлений\! Больше подробностей в этой заметке\.

![1245_7_36_ru/image1.png](https://import.viva64.com/docx/blog/1245_7_36_ru/image1.png)


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



**Выбор версии стандартов MISRA C и MISRA C\+\+**

В C и C\+\+ анализаторе PVS\-Studio была добавлена возможность задать версии стандартов MISRA C и MISRA C\+\+\. Выбрать используемую версию стандарта можно [в настройках PVS\-Studio плагина](https://pvs-studio.ru/ru/docs/manual/0030/#misra) для Visual Studio\. 

Поддерживаемые версии стандартов: MISRA C 2012, MISRA C 2023, MISRA C\+\+ 2008 и MISRA C\+\+ 2023\.

**Расширение механизма пользовательских аннотаций в C\#**

В C\# анализаторе был расширен механизм пользовательских аннотаций\. До этого пользователи могли создавать аннотации только для taint\-анализа\.


> В анализаторе существует ряд аннотаций для taint\\\-анализа\\\. С их помощью можно размечать источники и приёмники заражения\\\. Также можно помечать методы/конструкторы, которые производят валидацию taint\\\-данных\\\. Таким образом, если taint\\\-данные прошли валидацию, то при их попадании в приёмник анализатор не выдаст предупреждение\\\.



Теперь появилась возможность с помощью пользовательских аннотаций указать анализатору информацию, которая необходима не только для taint\-анализа\. Например, можно указать, что метод может вернуть null, что возвращаемое значение метода нужно использовать или что аргумент метода не должен быть равен null, и ещё много чего\.

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

**Плагин PVS\-Studio для Qt Creator 16**

Плагин PVS\-Studio теперь доступен для Qt Creator версий 16\.x, а вот поддержка для версий Qt Creator 10\.x прекращена\. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза\.

Подробнее об использовании PVS\-Studio в Qt Creator можно узнать в нашей [документации](https://pvs-studio.ru/ru/docs/manual/6648/)\.

**Доработки флагов файлов конфигурации**

* В кроссплатформенную утилиту для проверки C и C\+\+ проектов `pvs-studio-analyzer` добавлен новый флаг `--apply-pvs-configs`\. 

С помощью него включается режим автоматического поиска и применения файлов конфигурации правил `.pvsconfig` для проверяемых исходных файлов\. Поиск самих файлов конфигурации правил происходит в каталоге исходного файла и во всех родительских каталогах вплоть до корневой папки проекта, которая указывается с помощью нового флага `--project-root`\.

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

* Флаг `--analysis-paths` в утилите командной строки `pvs-studio-analyzer` получил новый режим `isolate-settings`\. 

Он позволяет изолировать настройки, назначаемые с помощью файлов конфигурации правил `.pvsconfig` внутри заданной директории\. Настройки, лежащие в родительских для этой директории папках, в этом режиме игнорируются\. 

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

Также для этого режима были добавлены настройки для файла `.pvsconfig`: `//V_ANALYSIS_PATHS isolate-settings` и `//V_ISOLATE_CURRENT_DIR`\. Подробнее об этом можно прочитать в соответствующем [разделе документации](https://pvs-studio.ru/ru/docs/manual/6630/)\.

**Обновление документации**

Была добавлена документация по использованию анализатора PVS\-Studio в сервисе для хранения исходного кода [GitFlic](https://pvs-studio.ru/ru/docs/manual/7176/), а также в DevSecOps платформах [Hexway](https://pvs-studio.ru/ru/docs/manual/7178/) и [AppSec\.Hub](https://pvs-studio.ru/ru/docs/manual/7177/)\.

**Breaking Changes**

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

* При анализе C и C\+\+ проектов на основе `compile_commands.json` в утилите командной строки `pvs-studio-analyzer` теперь игнорируются все вызовы не компиляторов\. Для работы с компиляторами, имеющими нестандартные имена, которые не определяются PVS\-Studio по умолчанию, можно использовать флаг `--compiler`\. Подробнее об этом можно узнать в соответствующем [разделе нашей документации](https://pvs-studio.ru/ru/docs/manual/6615/)\.
* Минимальная рекомендуемая версия macOS для запуска анализатора PVS\-Studio на процессорах с архитектурой x86\-64 — macOS Big Sur \(11\.1\)\.


> Полный список изменений вы сможете найти \[на странице истории версий PVS\\\-Studio\]\(https://pvs\-studio\.ru/ru/docs/manual/0010/\#ID75F366AD06\)\\\.



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

C, С\+\+

* [V2634](https://pvs-studio.ru/ru/docs/warnings/v2634/)\. MISRA\. Features from <fenv\.h\> should not be used\.
* [V2635](https://pvs-studio.ru/ru/docs/warnings/v2635/)\. MISRA\. The function with the 'system' name should not be used\.
* [V2636](https://pvs-studio.ru/ru/docs/warnings/v2636/)\. MISRA\. The functions with the 'rand' and 'srand' name of <stdlib\.h\> should not be used\.
* [V2637](https://pvs-studio.ru/ru/docs/warnings/v2637/)\. MISRA\. A 'noreturn' function should have 'void' return type\.
* [V2638](https://pvs-studio.ru/ru/docs/warnings/v2638/)\. MISRA\. Generic association should list an appropriate type\.
* [V2639](https://pvs-studio.ru/ru/docs/warnings/v2639/)\. MISRA\. Default association should appear as either the first or the last association of a generic selection\.
* [V2640](https://pvs-studio.ru/ru/docs/warnings/v2640/)\. MISRA\. Thread objects, thread synchronization objects and thread\-specific storage pointers should have appropriate storage duration\.
* [V2641](https://pvs-studio.ru/ru/docs/warnings/v2641/)\. MISRA\. Types should be explicitly specified\.
* [V2642](https://pvs-studio.ru/ru/docs/warnings/v2642/)\. MISRA\. The '\_Atomic' specifier should not be applied to the incomplete type 'void'\.
* [V2643](https://pvs-studio.ru/ru/docs/warnings/v2643/)\. MISRA\. All memory synchronization operation should be executed in sequentially consistent order\.

C\#

* [V3218](https://pvs-studio.ru/ru/docs/warnings/v3218/)\. Cycle condition may be incorrect due to an off\-by\-one error\.
* [V3219](https://pvs-studio.ru/ru/docs/warnings/v3219/)\. The variable was changed after it was captured in a LINQ method with deferred execution\. The original value will not be used when the method is executed\.
* [V3220](https://pvs-studio.ru/ru/docs/warnings/v3220/)\. The result of the LINQ method with deferred execution is never used\. The method will not be executed\.
* [V3221](https://pvs-studio.ru/ru/docs/warnings/v3221/)\. Modifying a collection during its enumeration will lead to an exception\.
* [V5629](https://pvs-studio.ru/ru/docs/warnings/v5629/)\. OWASP\. Code contains invisible characters that may alter its logic\. Consider enabling the display of invisible characters in the code editor\.

Java

* [V5320](https://pvs-studio.ru/ru/docs/warnings/v5320/)\. OWASP\. Use of potentially tainted data in configuration may lead to security issues\.
* [V5321](https://pvs-studio.ru/ru/docs/warnings/v5321/)\. OWASP\. Possible LDAP injection\. Potentially tainted data is used in a search filter\.
* [V5322](https://pvs-studio.ru/ru/docs/warnings/v5322/)\. OWASP\. Possible reflection injection\. Potentially tainted data is used to select class or method\.
* [V5323](https://pvs-studio.ru/ru/docs/warnings/v5323/)\. OWASP\. Potentially tainted data is used to define 'Access\-Control\-Allow\-Origin' header\.
* [V5324](https://pvs-studio.ru/ru/docs/warnings/v5324/)\. OWASP\. Possible open redirect vulnerability\. Potentially tainted data is used in the URL\.
* [V5325](https://pvs-studio.ru/ru/docs/warnings/v5325/)\. OWASP\. Setting the value of the 'Access\-Control\-Allow\-Origin' header to '\*' is potentially insecure\.
* [V5326](https://pvs-studio.ru/ru/docs/warnings/v5326/)\. OWASP\. OWASP\. A password for a database connection should not be empty\.
* [V5327](https://pvs-studio.ru/ru/docs/warnings/v5327/)\. OWASP\. Possible regex injection\. Potentially tainted data is used to create regular expression\.
* [V5328](https://pvs-studio.ru/ru/docs/warnings/v5328/)\. OWASP\. Using weak authorization checks could lead to security violations\.
* [V5329](https://pvs-studio.ru/ru/docs/warnings/v5329/)\. OWASP\. Using unsafe methods of file creation is not recommended because an attacker might access the files\.
* [V5330](https://pvs-studio.ru/ru/docs/warnings/v5330/)\. OWASP\. Possible XSS injection\. Potentially tainted data might be used to execute a malicious script\.

**Статьи**

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

* [Бета\-тестирование: обновлённый парсер для анализа кода на языках C и C\+\+](https://pvs-studio.ru/ru/blog/posts/cpp/1235/)
* [std::array в С\+\+ быстрее массива в С\. Иногда](https://pvs-studio.ru/ru/blog/posts/cpp/1231/)
* [Безопасная работа с массивами? Нет, не слышали](https://pvs-studio.ru/ru/blog/posts/cpp/1241/)
* [Вторая часть исследования Nau Engine](https://pvs-studio.ru/ru/blog/posts/cpp/1226/)
* [Третья часть исследования Nau Engine](https://pvs-studio.ru/ru/blog/posts/cpp/1244/)
* [Учимся рефакторить код на примере багов в TDengine, часть 1: про колбасу](https://pvs-studio.ru/ru/blog/posts/cpp/1230/)
* [Учимся рефакторить код на примере багов в TDengine, часть 2: макрос, пожирающий стек](https://pvs-studio.ru/ru/blog/posts/cpp/1238/)
* [Учимся рефакторить код на примере багов в TDengine, часть 3: плата за лень](https://pvs-studio.ru/ru/blog/posts/cpp/1242/)

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

* [PVS\-Studio в разработке на Unity: новые специализированные диагностики](https://pvs-studio.ru/ru/blog/posts/csharp/1236/)
* [Copy\-paste на большом экране: разбор ошибок и странных мест Radarr](https://pvs-studio.ru/ru/blog/posts/csharp/1232/)
* [Графический переполох: что таит в себе ScottPlot?](https://pvs-studio.ru/ru/blog/posts/csharp/1239/)
* [Инновационные технические решения и баги в исходном коде PowerShell](https://pvs-studio.ru/ru/blog/posts/csharp/1243/)
* [\.NET Digest \#6](https://pvs-studio.ru/ru/blog/posts/csharp/1234/)

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

* [Нововведения Java 24](https://pvs-studio.ru/ru/blog/posts/java/1233/)
* [Инъекция блокнотом или история о том, как мы новые диагностики делали](https://pvs-studio.ru/ru/blog/posts/java/1240/)
* [Поиск потенциальных уязвимостей в коде, часть 2: практика](https://pvs-studio.ru/ru/blog/posts/java/1228/)

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

* [Новые интересные диагностики в PVS\-Studio 7\.35](https://pvs-studio.ru/ru/blog/posts/1229/)
* [Грязный код — надёжное хранилище ошибок\. Теория разбитых окон](https://pvs-studio.ru/ru/blog/posts/1237/)
* [Всё ли знает ChatGPT? Проверяем факты о PVS\-Studio](https://pvs-studio.ru/ru/blog/posts/1227/)

**Доклады**

**Модельные варианты ошибок в статических анализаторах**

ГОСТ Р 71207, касающийся статического анализа кода, вводит термин "модельный вариант" ошибок\. Дело в том, что невозможно в общем виде искать такие ошибки, как неопределенное поведение, разыменование нулевых указателей или опечатки\. Но искать их нужно\. Как же создатели анализаторов выходят из этой ситуации? Как раз с помощью понятия модельных вариантов ошибок \(даже не зная, что они так называются\), сводя поиск ошибки общего типа к задаче поиска ошибок множества подтипов\.

Андрей Карпов предлагает заглянуть внутрь PVS\-Studio и посмотреть, как происходит поиск ошибок, несмотря на технологические ограничения методологии статического анализа\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-11805870&id=456239543&hash=0382335c592e2127>

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

Мы пригласили в гости Дмитрия Свиридкина — создателя книги "[Путеводитель C\+\+ программиста по неопределённому поведению](https://pvs-studio.ru/ru/blog/posts/cpp/1215/)"\. Обсудили грани, отделяющие корректный C\+\+ код от некорректного, попросили рассказать историю написания книги, поговорили о развитии языка и его будущем\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-11805870&id=456239525&hash=67e28cc410bc74eb>

**SAST как Quality Gate**

Использование SAST в качестве Quality Gate — это не просто тренд, а необходимость для современных разработчиков, стремящихся создавать надёжные и безопасные приложения\. Рассказали, как внедрение этих практик может значительно повысить уровень вашего проекта\.

Посмотреть можно тут:

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

**Внедрение процессов безопасной разработки\. Интеграция PVS\-Studio и SGRC SECURITM**

Совместно с экспертом SECURITM Евгенией Карповой мы поговорили о том, как обеспечить соблюдение требований ГОСТ в области безопасной разработки программного обеспечения\.

Показали реальные примеры использования PVS\-Studio и SECURITM, дали рекомендации по настройке инструментов и рассказали, как оптимизировать процессы разработки для достижения высокого уровня безопасности\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-11805870&id=456239541&hash=57e0db5e8cd15e5a>

**ГОСТ Р 71207–2024\. Безопасная разработка и статический анализ**

Использование статических анализаторов кода является одним из условий разработки безопасного ПО\.

Но возникали вопросы: какие инструменты выбрать? что они должны уметь? как "правильно" проводить анализ и организовать процесс?

С ответами поможет новый ГОСТ, вышедший в апреле 2024 года — ГОСТ Р 71207\-2024: "Статический анализ программного обеспечения"\.

В докладе рассмотрели самые важные темы ГОСТа, его актуальность, новые требования, подходы к анализу и многое другое\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-31054583&id=456239064&hash=1e9966a5edc44e6b>

**Ищем ошибки в начале, в середине и в конце разработки**

В докладе подняли тему поиска ошибок, качества кода и безопасной разработки\. 

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

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-11805870&id=456239529&hash=5f0e6e664f40ddf6>

**Как статический анализ дополняет тестирование продукта**

Разберем тему использования статического анализа в связке с тестированием\. Как он работает на реальных примерах, какие примеры решает, а также как может помочь оптимизировать код проекта\. Немного заглянем в сторону безопасности, уязвимостей и стандартов\.

А еще пару лайфхаков при использовании инструмента\.

<https://vk.com/video_ext.php?oid=-11805870&id=456239532&hash=1a5acb37a4c96b83>

**Как искать ошибки и уязвимости во время разработки**

Многие слышали и о статических анализаторах, и о SAST\-инструментах, но в чём же реально их польза? Ну, во\-первых, они могут выявить потенциальные ошибки и уязвимости на ранних этапах разработки и всём цикле ПО, но как это проверить? Рассказали в докладе\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-184504774&id=456239158&hash=87e8226774a58fab>

**Роли в IT: Developer Advocate**

Как говорил современный тимлид: "Понапишут свой код, а потом адвокатов ищут"\. Кто такой Developer Advocate и чем он отличает от DevRel и маркетолога? Как сделать так, чтобы тебе платили деньги за то, что ты не пишешь код? Какие перспективы есть у человека на этой должности? Узнаете в этом выпуске\.

Посмотреть можно тут:

<https://vk.com/video_ext.php?oid=-11805870&id=456239538&hash=31a271691a3a900c>


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



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