﻿# Релиз PVS\-Studio 7\.10: OWASP, AUTOSAR, SARIF

Мы развиваем PVS\-Studio не только как классический анализатор кода, но и в направлении Security и Safety\. В связи с этим начата работа по поддержке стандартов OWASP и AUTOSAR C\+\+14\. Для облегчения интеграции PVS\-Studio с другими инструментами контроля качества кода, поддержана конвертация результатов работы анализатора в формат SARIF\. Реализованы 22 новые диагностики для языков C, C\+\+, C\# и Java\. Из этого пресс\-релиза вы узнаете об этих и других нововведениях более подробно\.

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

Пока мир борется с вирусами, мы боремся с ошибками и потенциальными уязвимостями\. Чтобы борьба была эффективней, в этом релизе [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) мы развивали следующие направления:

1. security \(SAST\);
1. safety;
1. интеграция;
1. новые диагностики\.

## Смотри, а не читай \(YouTube\)

<https://www.youtube.com/embed/SF88i3I_sbE>

## Security

Анализатор PVS\-Studio является [SAST \(Static Application Security Testing\) инструментом](https://pvs-studio.ru/ru/pvs-studio/sast/) и помогает выявлять потенциальные уязвимости и [угрозы нулевого дня](https://pvs-studio.ru/ru/blog/posts/0689/)\. Для удобства работы специалистов по безопасности мы уже достаточно давно классифицировали предупреждения PVS\-Studio согласно списку [CWE](https://cwe.mitre.org/) и стандарту [SEI CERT](https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards)\.

Следующим шагом стало развитие анализатора в сторону поддержки стандарта [OWASP ASVS](https://owasp.org/www-project-application-security-verification-standard/)\. Нам ещё предстоит работа по более полной поддержке поиска паттернов потенциальных уязвимостей, описанных в OWASP\. Однако, начиная с PVS\-Studio 7\.10, уже можно познакомиться с [таблицей](https://pvs-studio.ru/ru/pvs-studio/sast/owasp/) соответствия OWASP диагностикам\. Пока таблица небольшая, но она будет постепенно пополняться\.

## Safety

Для обеспечения качества и надёжности программного обеспечения используются такие стандарты, как MISRA C и MISRA C\+\+\. Наиболее часто они применяются при разработке программного обеспечения для встраиваемых устройств\. Подробнее про эти стандарты вы можете прочитать в статье "[Что такое MISRA и как её готовить](https://pvs-studio.ru/ru/blog/posts/cpp/0702/)"\.

Однако, стандарт MISRA С\+\+ уже достаточно устарел и не рассчитан на современные версии языка программирования C\+\+\. Поэтому ему на смену приходит стандарт AUTOSAR C\+\+14 Coding Guidelines\.

Мы решили, помимо MISRA, начать поддерживать и этот более новый стандарт\. Первые работы в этом направлении проведены как раз в PVS\-Studio 7\.10\. Таблица соответствия предупреждений PVS\-Studio и AUTOSAR доступна [здесь](https://pvs-studio.ru/ru/pvs-studio/sast/autosar/)\. Как и в случае с другими стандартами, мы будем постепенно расширять поддержку стандарта AUTOSAR\. 

## Интеграция

Утилиты для преобразования результатов анализа PVS\-Studio \(PlogConverter\.exe для Windows и plog\-converter для Linux\\macOS\) теперь поддерживают конвертацию в формат [SARIF](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=sarif) \(Static Analysis Results Interchange Format\)\.

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

В плагин [PVS\-Studio для JetBrains Rider](https://pvs-studio.ru/ru/docs/manual/0052/) добавлена поддержка работы с результатами анализа при [проверке проектов для Unreal Engine](https://pvs-studio.ru/ru/docs/manual/0043/) \(JetBrains Rider для Unreal Engine доступен сейчас по программе раннего доступа\)\.

[SonarQube плагин](https://pvs-studio.ru/ru/docs/manual/0037/) PVS\-Studio теперь умеет ассоциировать сообщения анализатора, имеющие CWE \(Common Weakness Enumeration\) идентификатор, с сообщениями о дефектах защищённости на вкладке Security Category\.

## Новые диагностики

### Язык C, C\+\+

1. [V830](https://pvs-studio.ru/ru/docs/warnings/v830/)\. Decreased performance\. Consider replacing the use of 'std::optional::value\(\)' with either the '\*' or '\-\>' operator\.
1. [V831](https://pvs-studio.ru/ru/docs/warnings/v831/)\. Decreased performance\. Consider replacing the call to the 'at\(\)' method with the 'operator\[\]'\.
1. [V1064](https://pvs-studio.ru/ru/docs/warnings/v1064/)\. The left operand of integer division is less than the right one\. The result will always be zero\.
1. [V1065](https://pvs-studio.ru/ru/docs/warnings/v1065/)\. Expression can be simplified: check similar operands\.
1. [V1066](https://pvs-studio.ru/ru/docs/warnings/v1066/)\. The 'SysFreeString' function should be called only for objects of the 'BSTR' type\.
1. [V1067](https://pvs-studio.ru/ru/docs/warnings/v1067/)\. Throwing from exception constructor may lead to unexpected behavior\.

### Язык C\#

1. [V3156](https://pvs-studio.ru/ru/docs/warnings/v3156/)\. The argument of the method is not expected to be null\.
1. [V3157](https://pvs-studio.ru/ru/docs/warnings/v3157/)\. Suspicious division\. Absolute value of the left operand is less than the right operand\.
1. [V3158](https://pvs-studio.ru/ru/docs/warnings/v3158/)\. Suspicious division\. Absolute values of both operands are equal\.
1. [V3159](https://pvs-studio.ru/ru/docs/warnings/v3159/)\. Modified value of the operand is not used after the increment/decrement operation\.
1. [V3160](https://pvs-studio.ru/ru/docs/warnings/v3160/)\. Argument of incorrect type is passed to the 'Enum\.HasFlag' method\.
1. [V3161](https://pvs-studio.ru/ru/docs/warnings/v3161/)\. Comparing value type variables with 'ReferenceEquals' is incorrect because compared values will be boxed\.
1. [V3162](https://pvs-studio.ru/ru/docs/warnings/v3162/)\. Suspicious return of an always empty collection\.
1. [V3163](https://pvs-studio.ru/ru/docs/warnings/v3163/)\. An exception handling block does not contain any code\.
1. [V3164](https://pvs-studio.ru/ru/docs/warnings/v3164/)\. Exception classes should be publicly accessible\.

### Язык Java

1. [V6093](https://pvs-studio.ru/ru/docs/warnings/v6093/)\. Automatic unboxing of a variable may cause NullPointerException\.
1. [V6094](https://pvs-studio.ru/ru/docs/warnings/v6094/)\. The expression was implicitly cast from integer type to real type\. Consider utilizing an explicit type cast to avoid the loss of a fractional part\.
1. [V6095](https://pvs-studio.ru/ru/docs/warnings/v6095/)\. Thread\.sleep\(\) inside synchronized block/method may cause decreased performance\.
1. [V6096](https://pvs-studio.ru/ru/docs/warnings/v6096/)\. An odd precise comparison\. Consider using a comparison with defined precision: Math\.abs\(A \- B\) < Epsilon or Math\.abs\(A \- B\) \> Epsilon\.
1. [V6097](https://pvs-studio.ru/ru/docs/warnings/v6097/)\. Lowercase 'L' at the end of a long literal can be mistaken for '1'\.
1. [V6098](https://pvs-studio.ru/ru/docs/warnings/v6098/)\. A method does not override another method from the base class\.
1. [V6099](https://pvs-studio.ru/ru/docs/warnings/v6099/)\. The initial value of the index in the nested loop equals 'i'\. Consider using 'i \+ 1' instead\.

## Дополнительные ссылки

Таблицы соответствий [диагностик](https://pvs-studio.ru/ru/docs/warnings/) PVS\-Studio различным стандартам:

* [Соответствие CWE](https://pvs-studio.ru/ru/pvs-studio/sast/cwe/)
* [Соответствие OWASP](https://pvs-studio.ru/ru/pvs-studio/sast/owasp/)
* [Соответствие SEI CERT](https://pvs-studio.ru/ru/pvs-studio/sast/cert/)
* [Соответствие MISRA](https://pvs-studio.ru/ru/pvs-studio/sast/misra/)
* [Соответствие AUTOSAR](https://pvs-studio.ru/ru/pvs-studio/sast/autosar/)

Свежие публикации в нашем блоге, на которые хочется обратить внимание:

* [Хорошо ли вы помните nullable value types? Заглядываем "под капот"](https://pvs-studio.ru/ru/blog/posts/csharp/0772/)\.
* [Проверка Clang 11 с помощью PVS\-Studio](https://pvs-studio.ru/ru/blog/posts/cpp/0771/)\.
* [Почему важно проводить статический анализ открытых библиотек, которые вы добавляете в свой проект](https://pvs-studio.ru/ru/blog/posts/cpp/0762/)\.