Pull to refresh
325.74
PVS-Studio
Static Code Analysis for C, C++, C# and Java

PVS-Studio 7.14: межмодульный анализ в С++ и плагин для JetBrains CLion

Reading time5 min
Views1.7K

0854_Release_714_ru/image2.png


Помимо увеличения количества диагностик с каждым новым релизом анализатор PVS-Studio развивается и в инфраструктурном плане. В данном случае это плагин для среды разработки JetBrains CLion, межмодульный анализ С++ проектов, ускорение работы ядра C# анализатора.


Интеграция с JetBrains CLion


0854_Release_714_ru/image4.png


PVS-Studio теперь можно удобно использовать в среде разработки JetBrains CLion с помощью плагина для данной IDE. Подробнее о том, с чем мы столкнулись при разработке CLion плагина, можно почитать в нашем блоге. А здесь можно посмотреть на все IDE от JetBrains, работу с которыми уже поддерживает PVS-Studio.


Поскольку это первый релиз плагина для CLion, то повышена вероятность, что вы натолкнётесь на какие-то неудобства в использовании или ошибки. В этом случае просим не стесняться и сразу написать нам. Мы постараемся помочь, подсказать или исправить недоработки. Заранее спасибо.


Межмодульный анализ проектов на языке C и C++


В С++ анализатор PVS-Studio добавлена поддержка межмодульного анализа. В этом режиме анализатор при разборе кода учитывает результаты вызовов методов, объявленных в других единицах трансляции. Межмодульный анализ также есть в C# (на уровне проектов) и Java (на уровне пакетов) анализаторах PVS-Studio. В С++ анализаторе данный режим не активирован по умолчанию, т.к. он может замедлять скорость анализа. В нашем блоге можно почитать подробнее о его использовании и особенностях его реализации.


Увеличение скорости работы


Скорость анализа в C# анализаторе PVS-Studio была увеличена до 2 раз при анализе крупных (более 10 000 исходных файлов) проектов. Также C# анализатор теперь значительно эффективнее использует многоядерные процессоры. В нашем блоге мы поделились методиками, которые мы использовали для ускорения работы C# анализатора и которые могут подойти для других классов .NET приложений:


  1. Оптимизация .NET приложения: как простые правки позволили ускорить PVS-Studio и уменьшить потребление памяти на 70%.
  2. Оптимизация .NET приложений: большой результат маленьких правок.

29 новых диагностик


Как видно из списка, приведённого ниже, большинство реализуемых сейчас диагностик предназначено для покрытия стандарта MISRA C. Мы сосредоточились на его поддержке, и сейчас покрытие стандарта составляет 60%. В ближайшее время мы планируем увеличить поддержку как минимум до 80%, а также реализовать поддержку стандарта проверки соответствия кода MISRA C Compliance.


Помимо этого, мы продолжаем развивать возможности анализатора в выявлении потенциальных уязвимостей. Теперь PVS-Studio обеспечивает покрытие 6 из 10 категорий в OWASP Top 10 — списке наиболее распространённых и опасных угроз защищённости Web-приложений. В этом релизе мы добавили в анализатор диагностики для категорий A5 Broken Access Control, A7 Cross-Site Scripting (XSS) и A8 Insecure Deserialization. В будущих релизах в этом году мы планируем увеличить покрытие до 9 категорий.


  • V2015. An identifier declared in an inner scope should not hide an identifier in an outer scope.
  • V2016. Consider inspecting the function call. The function was annotated as dangerous.
  • V2584. MISRA. Expression used in condition should have essential Boolean type.
  • V2585. MISRA. Casts between a void pointer and an arithmetic type should not be performed.
  • V2586. MISRA. Flexible array members should not be declared.
  • V2587. MISRA. The '//' and '/*' character sequences should not appear within comments.
  • V2588. MISRA. All memory or resources allocated dynamically should be explicitly released.
  • V2589. MISRA. Casts between a pointer and a non-integer arithmetic type should not be performed.
  • V2590. MISRA. Conversions should not be performed between pointer to function and any other type.
  • V2591. MISRA. Bit fields should only be declared with explicitly signed or unsigned integer type.
  • V2592. MISRA. An identifier declared in an inner scope should not hide an identifier in an outer scope.
  • V2593. MISRA. Single-bit bit fields should not be declared as signed type.
  • V2594. MISRA. Controlling expressions should not be invariant.
  • V2595. MISRA. Array size should be specified explicitly when array declaration uses designated initialization.
  • V2596. MISRA. The value of a composite expression should not be assigned to an object with wider essential type.
  • V2597. MISRA. Cast should not convert pointer to function to any other pointer type.
  • V2598. MISRA. Variable length array types are not allowed.
  • V2599. MISRA. The standard signal handling functions should not be used.
  • V2600. MISRA. The standard input/output functions should not be used.
  • V2601. MISRA. Functions should be declared in prototype form with named parameters.
  • V2602. MISRA. Octal and hexadecimal escape sequences should be terminated.
  • V2603. MISRA. The 'static' keyword shall not be used between [] in the declaration of an array parameter.
  • V3172. The 'if/if-else/for/while/foreach' statement and code block after it are not related. Inspect the program's logic.
  • V3552. AUTOSAR. Cast should not convert a pointer to a function to any other pointer type, including a pointer to function type.
  • V3553. AUTOSAR. The standard signal handling functions should not be used.
  • V3554. AUTOSAR. The standard input/output functions should not be used.
  • V5609. OWASP. Possible path traversal vulnerability. Potentially tainted data is used as a path.
  • V5610. OWASP. Possible XSS vulnerability. Potentially tainted data might be used to execute a malicious script.
  • V5611. OWASP. Potential insecure deserialization vulnerability. Potentially tainted data is used to create an object using deserialization.

Прочее


В плагин PVS-Studio для SonarQube добавлена поддержка версии SonarQube 8.9 LTS.


В C++ анализаторе PVS-Studio теперь можно отключать диагностические правила для заданного диапазона строк в исходном файле. См. раздел "Включение и выключение определенных диагностик для блока кода" в главе документации, касающейся подавления ложных срабатываний.


Один из наших пользователей написал заметку об опыте интеграции анализатора PVS-Studio с uVision Keil. "Из коробки" такая возможность не предоставляется, но если хочется, то всё можно организовать :). История получилась занятной, и мы рекомендуем познакомиться с ней даже тем, кто не использует uVision Keil: Интеграция PVS-Studio в uVision Keil. Цитата из статьи:


Так продолжалось до тех пор, пока однажды я не потратил 3 дня на отладку очень неприятного бага, который отличался совершенно дикими проявлениями в случайные моменты времени. Баг оказался банальным чтением по нулевому указателю (которое на микроконтроллерах зачастую не приводит ни к каким мгновенным ошибкам типа Access Violation). Быстренько убедившись, что PVS-Studio находит этот баг, я понял, что хватит это терпеть! – и решил-таки заняться интеграцией с Keil'ом.

Некоторые статьи, опубликованные с момента предыдущего релиза


  1. Неожиданная статья про нашего единорога: кто такой маскот PVS-Studio?
  2. Красивая ошибка в реализации функции конкатенации строк.
  3. Подводные камни при работе с enum в C#.
  4. OWASP, уязвимости и taint анализ в PVS-Studio C#. Смешать, но не взбалтывать.
  5. Статический анализ защищает ваш код от бомб замедленного действия.
  6. Опыт команды PVS-Studio: повышение производительности C++ анализатора на Windows при переходе на Clang

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. PVS-Studio 7.14: intermodular analysis in C++ and plugin for JetBrains CLion.

Tags:
Hubs:
+12
Comments4

Articles

Information

Website
pvs-studio.com
Registered
Founded
2008
Employees
31–50 employees