Старая история версий PVS-Studio (до версии 8.00)
Новую историю версий смотрите здесь.
PVS-Studio 7.43 (10 июня 2026)
- Теперь пользователям с лицензией Team доступен анализ Unreal Engine проектов. Ранее для использования интеграции с Unreal Build Tool требовалась лицензия типа Enterprise. Подробнее об анализе Unreal Engine проектов можно узнать в документации.
- Продолжаются работы по покрытию стандарта MISRA C++ 2023. 12 существующих диагностических правила группы MISRA адаптированы под стандарт MISRA C++ 2023. Подробнее о поддержке стандартов MISRA можно прочитать по ссылке.
- Улучшена интеграция с платформой разработки SourceCraft. Теперь для анализа проектов с помощью PVS-Studio можно использовать готовые образы с необходимыми для анализа компонентами. Подробнее об интеграции можно прочитать в документации, а пример использования можно найти репозитории.
- Поддержан анализ проектов, использующих компилятор из Zephyr SDK. Проанализировать такие проекты можно на основе
compile_commands.json или с помощью мониторинга компиляции. Подробнее об этом можно прочитать в документации.
- В C и C++ анализаторе улучшен межпроцедурный анализ циклов. Теперь анализатор умеет обсчитывать канонические циклы с учётом возможных диапазонов значений переменных.
- Поддержана работа C# анализатора с .NET SDK версии 10.0.300 на Linux и macOS. О том, как использовать C# анализатор на этих платформах, можно прочитать в документации.
- [Breaking change] Изменено сообщение для диагностического правила V560. Возможно повторное попадание ранее подавленных сообщений в отчёт анализатора.
- [Breaking change] Минимально поддерживаемая версия CMake для работы с CMake-модулем PVS-Studio поднята с 3.10 (ноябрь 2018 г.) до 3.15 (апрель 2019 г.).
- [Breaking change] В анализаторе кросс-платформенных C и C++ проектов (утилиты
pvs-studio-analyzer и CompileCommandsAnalyzer.exe) изменён код возврата в случаях, когда переданный на анализ список файлов пуст или когда запуск анализа в инкрементальном режиме не обнаружил единиц трансляции для анализа.
- V6135. The return value of the 'finally' block overrides return values of 'try' and 'catch' blocks.
PVS-Studio 7.42 (8 апреля 2026)
- Запущена программа раннего тестирования новых анализаторов кода для JavaScript и Go. В мае к ней добавится анализатор для TypeScript. Также для тестирования стала доступна платформа контроля качества кода PVS-Studio Atlas. Записаться на тестирование новых инструментов можно по ссылке.
- Начаты работы по покрытию стандарта MISRA C++ 2023. 22 существующих диагностических правила группы MISRA адаптированы под стандарт MISRA C++ 2023. В плагинах PVS-Studio для IDE и утилитах командной строки теперь можно выбрать используемую версию стандарта MISRA C++. Подробнее о поддержке стандартов MISRA можно прочитать по ссылке.
- Прекращена поддержка сценария бесплатного использования анализатора с помощью специальных комментариев в коде. Подробнее про то, как бесплатно использовать анализатор для open source проектов, можно прочитать здесь.
- Плагин PVS-Studio стал доступен для Qt Creator версий 19.x. Прекращена поддержка плагина для версий Qt Creator 13.x. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза.
- Добавлена документация об использовании анализатора в платформе разработки SourceCraft.
- Начиная с версии 4.3.0 сборочная система CMake имеет встроенный механизм для работы с PVS-Studio. Подробнее об этом можно прочитать в документации.
- Приостановлена дальнейшая разработку диагностических правил группы "Диагностика 64-битных ошибок". Они больше не будут развиваться и в будущем могут быть отключены. Если вы используете эти правила, свяжитесь с нашей поддержкой, мы поможем найти замену или предложим альтернативное решение.
- Уменьшено время анализа шаблонного кода C и C++ анализатором за счёт улучшения механизма его обработки.
- В C# анализаторе добавлены дополнительные механизмы для отладки его работы. В ситуации, когда анализатор не смог получить встроенные .NET-типы, выдаётся новое предупреждение V053. Также добавлен флаг
--createBinaryLogs для логирования работы механизмов Roslyn. Подробнее об этом написано в документации.
- В C# анализаторе PVS-Studio исправлена ошибка при проверке C# .NET Framework проектов не SDK стиля, которая возникала после обновления Visual Studio 2026 до версии 18.4.0+.
- В C и C++ анализаторе улучшены вычисление и анализ простых функций в зависимости от аргументов, с которыми они вызываются.
- V1119. Preprocessing directive is present within a macro argument. This leads to undefined behavior.
- V3232. Use of externally-controlled format string. Potentially tainted data is used as a format string.
- V6133. Dereferencing the parameter without a null check. Passing the 'null' value to the 'equals' method should not cause 'NullPointerException'.
- V6134. It is not recommended to throw exceptions from the 'equals' method.
PVS-Studio 7.41 (10 февраля 2026)
- Завершён очередной этап расширения покрытия диагностическими правилами стандарта MISRA C 2023 в C++ анализаторе PVS-Studio. Обеспечено покрытие на уровне 86%. В дальнейшем мы планируем повысить покрытие стандарта MISRA C++ 2023. Подробнее о поддержке стандартов MISRA можно прочитать здесь.
- Улучшены диагностические возможности C++ анализатора PVS-Studio при проверке Unreal Engine кода: исправлены работа диагностического правила V557 с контейнерами движка и проблема парсинга спецификатора
final в виртуальных функциях.
- Расширена поддержка taint-анализа в C# анализаторе: теперь возможно добавлять пользовательские аннотации для
async-функций, также размечены async-функции классов стандартной библиотеки. Подробнее о пользовательских аннотациях для C# анализатора можно прочитать в документации.
- В дистрибутивы PVS-Studio добавлена утилита
pvs-fp-cleaner, предназначенная для удаления неактуальных маркеров подавления ложноположительных срабатываний из кодовой базы. Подробнее о её работе можно прочитать в документации.
- Начато внедрение новой системы логирования для упрощения сбора информации о возникающих при работе анализаторов PVS-Studio проблемах. На первом этапе расширенное логирование было добавлено для кроссплатформенного анализатора C и C++ проектов. В ближайших релизах расширенное логирование будет поддержано в анализаторе C++ и C# MSBuild проектов. Подробнее о новой системе логирования можно прочитать в документации.
- Улучшения в плагине для IntelliJ IDEA: добавлены возможность конвертации отчёта анализатора в CSV-формат и настройка для отображения относительных путей, исправлено замедление при открытии документации. Подробнее о плагине для IDEA можно прочитать здесь.
- Исправлены ошибки при работе C# анализатора с .NET Core SDK проектами, включающими
Directory.Build.props, в системах, где отсутствуют экземпляры Visual Studio.
- Для запуска Java анализатора PVS-Studio теперь можно использовать JDK выше 23 версии. Поддерживаемая анализатором версия языка Java не изменилась. Ознакомиться с информацией о поддерживаемых Java анализатором версиях языка можно на странице системных требований.
- Исправлена проблема при эвалюации Qt-проектов в плагине для Qt Creator на macOS.
- [Breaking change] Стандартизирован вывод анализатора в формате CSV. Выдаваемый утилитами конвертации отчёт изменён для всех платформ.
- [Breaking change] Изменено сообщение для диагностического правила V2609. Возможно повторное попадание ранее подавленных сообщений в отчёт анализатора.
- V2667. MISRA. The value of an expression and its persistent side effects must be the same under all permitted evaluation orders and must be independent from thread interleaving.
- V2668. MISRA. Macro parameter immediately following by the '#' operator should not immediately be followed by the '##' operator.
- V2669. MISRA. Tokens that look like a preprocessing directive should not occur within a macro argument.
- V2670. MISRA. Thread objects, thread synchronization objects, and thread-specific storage pointers should only be accessed by the appropriate Standard Library functions.
- V2671. MISRA. Pointers returned by the function 'localeconv' / 'getenv' / 'setlocale' / 'strerror' should be used as if they have pointer to const-qualified type.
- V2672. MISRA. Subtraction between pointers should only be applied to pointers that address elements of the same array.
- V3230. Comparison with 'typeof(Nullable)' is meaningless. Calling 'GetType()' on a nullable variable never returns 'Nullable'.
- V5339. OWASP. Potential RCE vulnerability. Insecure GraalVM context is used to process potentially tainted data.
- V5340. OWASP. Code contains invisible characters that may alter its logic. Consider enabling the display of invisible characters in the code editor.
PVS-Studio 7.40 (10 декабря 2025)
- Плагин PVS-Studio стал доступен для IDE Visual Studio 2026. О работе с плагином можно прочитать в соответствующем разделе документации.
- Плагин PVS-Studio стал доступен для Qt Creator версий 18.x. Прекращена поддержка плагина для версий Qt Creator 12.x. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза.
- В C# анализатор PVS-Studio добавлена поддержка проектов для .NET 10. На Windows минимальная версия .NET, необходимая для анализа SDK-style проектов, остаётся неизменной — .NET 9. Для анализа C# проектов на Linux требуется .NET 10.
- Была проведена работа по улучшению части диагностических правил C#-анализатора, входящих в первую сотню. Были поддержаны новые конструкции языка, улучшены механизмы PVS-Studio по выявлению проблем в коде и множество других доработок.
- В раздел документации об использовании PVS-Studio для анализа Unreal Engine проектов добавлена инструкция об использовании анализатора в распределённой системе сборки Unreal Build Accelerator.
- Подтверждена техническая совместимость статического анализатора PVS-Studio с операционной системой Astra Linux.
- На странице классификации предупреждений PVS-Studio согласно стандартам MISRA C и MISRA C++ добавлен процент покрытия по версиям стандарта и категориям правил.
- Улучшена работа с файлами конфигурации анализа
.pvsconfig. Теперь анализатор правильно разрешает относительные пути для опций V_EXCLUDE_PATH и V_ANALYSIS_PATHS. Подробнее о возможностях .pvsconfig можно прочитать в документации.
- Улучшена работа нового парсера C и C++ кода с шаблонными функциями. Он появился в PVS-Studio 7.38. Если вы столкнулись с нестабильной работой нового парсера, рекомендуем временно переключиться на предыдущую реализацию с помощью //V_USE_OLD_PARSER и обязательно сообщить о проблеме в техническую поддержку. Это поможет нам быстрее улучшить его надёжность.
- Произведены улучшения в taint-анализе Java кода: добавлены поддержка тернарных операторов и учёт межпроцедурного контекста при обходе полей.
- В анализатор кроссплатформенных C и C++ проектов добавлена поддержка инструмента инкрементальной сборки sccache. Подробнее об этом можно прочитать в документации.
- Исправлена проблема в работе интеграции PVS-Studio с сервисом Compiler Explorer. О том, как воспользоваться интеграцией, можно прочитать на этой странице.
- [Breaking change] Обновлены ключи для установки анализатора PVS-Studio из
.deb и .rpm репозиториев. Может потребоваться переустановить ключи по инструкции из документации.
- [Breaking change] Для анализа C# проектов на Linux и macOS теперь требуется .NET SDK версии 10.
- V2663. MISRA. The macro EOF should only be compared with the unmodified return value of any Standard Library function capable of returning EOF.
- V2664. MISRA. Use of the string handling functions from <string.h> should not result in accesses beyond the bounds of the objects referenced by their pointer parameters.
- V2665. MISRA. The size argument passed to function from <string.h> should have an appropriate value.
- V2666. MISRA. All declarations of an object with an explicit alignment specification should specify the same alignment.
- V3228. It is possible that an assigned variable should be used in the next condition. Consider checking for misprints.
- V3229. The 'GetHashCode' method may return different hash codes for equal objects. It uses an object reference to generate a hash for a variable. Check the implementation of the 'Equals' method.
- V5337. OWASP. Possible NoSQL injection. Potentially tainted data is used to create query.
- V5338. OWASP. Possible Zip Slip vulnerability. Potentially tainted data is used in the path to extract the file.
- V2023. Absence of the 'override' specifier when overriding a virtual function may cause a mismatch of signatures.
PVS-Studio 7.39 (10 октября 2025)
- Были исправлены ошибки и падения, связанные с использованием нового парсера C++, представленного в предыдущей версии С++ анализатора PVS-Studio, в том числе критические падения при анализе проектов на Unreal Engine. Если вы столкнулись с нестабильной работой нового парсера, рекомендуем временно переключиться на предыдущую реализацию с помощью //V_USE_OLD_PARSER и обязательно сообщить о проблеме в техническую поддержку. Это поможет нам быстрее улучшить его надёжность.
- В Java анализаторе проведена работа по улучшению покрытия диагностическими правилами категорий OWASP Top 10 2021. Теперь он покрывает 9 из 10 категорий. Подробнее об этом можно прочитать здесь.
- Добавлена поддержка генерации отчёта MISRA Compliance с учётом новых поддерживаемых версий MISRA. Продолжаются работы по поддержке стандарта MISRA C 2023, которые планируется завершить до конца 2025 года. Подробнее о покрытии стандартов MISRA можно прочитать здесь.
- В плагине PVS-Studio для среды разработки Visual Studio Code добавлена возможность запуска анализа в режиме мониторинга компиляции на операционной системе Windows. В предстоящих релизах мы планируем также поддержать в Visual Studio Code трассировку сборки на операционных системах семейства Linux. Подробнее об этом в нашей документации.
- Добавлена документация об интеграции отчёта анализатора в ASOC-платформы CyberCodeReview и TRON.ASOC.
- Исправлена ошибка при установке плагина для среды разработки Visual Studio 2022, если в системе также установлена insider-версия Visual Studio 2026.
- Поддержан анализ проектов на основе сборочной системы MSBuild, использующих формат решений SLNF.
- Добавлен механизм перезаписи более приоритетных настроек для файлов конфигурации диагностик
.pvsconfig. Подробнее об этом в нашей документации.
- [Breaking change] В Java анализаторе изменены сообщения некоторых диагностических правил. Возможно появление в отчёте анализатора ранее подавленных сообщений.
- V2652. MISRA. Argument of an integer constant macro should have an appropriate form.
- V2653. MISRA. The small integer variants of the minimum-width integer constant macros should not be used.
- V2654. MISRA. Initializer list should not contain persistent side effects.
- V2655. MISRA. The right operand of a logical '&&' or '||' operator should not contain persistent side effects.
- V2656. MISRA. The Standard Library function memcmp should not be used to compare null terminated strings.
- V2657. MISRA. Obsolescent language features should not be used.
- V2658. MISRA. Dead code should not be used in a project.
- V2659. MISRA. Switch statements should be well-formed.
- V2660. MISRA. A function declared with a _Noreturn specifier should not return to its caller.
- V2661. MISRA. A 'for' loop should be well-formed.
- V2662. MISRA. Any value passed to a function from <ctype.h> should be representable as an unsigned character or be the value EOF.
- V3226. Potential resource leak. The disposing method will not be called if an exception occurs in the 'try' block. Consider calling it in the 'finally' block.
- V3227. The precedence of the arithmetic operator is higher than that of the shift operator. Consider using parentheses in the expression.
- V5631. OWASP. Use of externally-controlled format string. Potentially tainted data is used as a format string.
- V5335. OWASP. Potential XXE vulnerability. Insecure XML parser is used to process potentially tainted data.
- V5336. OWASP. Potential XEE vulnerability. Insecure XML parser is used to process potentially tainted data.
PVS-Studio 7.38 (6 августа 2025)
- Реализовано новое ядро C и C++ анализатора PVS-Studio, включающее полностью переработанные компоненты: парсер, семантический анализатор и систему типов. Новое ядро обеспечивает более точную обработку шаблонных конструкций, улучшенный разбор стандартной библиотеки и кода на современных стандартах языка C++. В ходе расширенного периода тестирования (EAP) была достигнута стабильная работа нового ядра на большом количестве реальных проектов. Для обеспечения обратной совместимости сохранена возможность временного переключения на предыдущую версию ядра. Подробнее об этом можно прочитать в документации. В случае возникновения проблем при анализе рекомендуем сообщить о них в техническую поддержку. Ваша обратная связь поможет ускорить финальную стабилизацию нового ядра C и C++ анализатора.
- Реализован механизм пользовательских аннотаций в Java анализаторе PVS-Studio. Также добавлена возможность разметки источников и приёмников заражения для taint-анализа. Подробнее о механизме и синтаксисе файлов с аннотациями можно прочитать в документации.
- На странице классификации предупреждений PVS-Studio, согласно стандартам MISRA C и MISRA C++, появилось разделение по версии стандарта. Посмотреть можно по этой ссылке. Мы продолжаем увеличивать покрытие стандарта MISRA C 2023 и планируем завершить работы в этом направлении до конца 2025 года.
- Поддержано использование Kotlin DSL при использовании плагина PVS-Studio для сборочной системы Gradle. Подробнее об этом можно прочитать в соответствующем разделе документации.
- Плагин PVS-Studio появился на портале плагинов для интегрированной среды разработки OpenIDE. Подробнее о работе с этим плагином можно прочитать в документации.
- В C и C++ анализаторе улучшен механизм анализа помеченных данных (taint-анализа). Теперь корректно отслеживается заражённость при операторе
%, исправлено пропускание предупреждений в функции ReadFile, а также улучшена обработка taint-статусов в ветвлениях. Это повышает точность обнаружения потенциальных уязвимостей, связанных с непроверенными данными.
- В плагин PVS-Studio для системы контроля качества кода SonarQube добавлена классификация срабатываний анализаторов PVS-Studio в соответствии со списком критических ошибок из стандарта ГОСТ Р 71207-2024, посвящённого использованию статических анализаторов в процессе разработки безопасного программного обеспечения (РБПО). Подробнее об этой классификации можно прочитать по ссылке.
- [Breaking change] Изменено сообщение для диагностического правила V1062 в случаях, когда оно выдаётся на
= delete. Возможно повторное попадание ранее подавленных срабатываний в отчёт анализатора.
- [Breaking change] Из-за распространения механизма анализа помеченных данных на диагностические правила V557, V609, V610, V1083 и V575 возможно повторное возникновение ранее подавленных сообщений, выданных диагностическим правилом V5009.
- [Breaking change] Изменён синтаксис описания параметров методов и конструкторов в JSON-аннотациях для C# анализатора PVS-Studio. Версия формата аннотаций увеличена, поддержка файлов предыдущей версии сохранена, но при их использовании анализатор выдаёт соответствующее предупреждение. Подробнее об обновлённом синтаксисе можно прочитать в документации.
- V2644. MISRA. Controlling expression of generic selection must not have side effects.
- V2645. MISRA. The language features specified in Annex K should not be used.
- V2646. MISRA. All arguments of any multi-argument type-generic macros from <tgmath.h> should have the same type.
- V2647. MISRA. Structure and union members of atomic objects should not be directly accessed.
- V2648. MISRA. Null pointer constant must be derived by expansion of the NULL macro provided by the implementation.
- V2649. MISRA. All arguments of any type-generic macros from <tgmath.h> should have an appropriate essential type.
- V2650. MISRA. Controlling expression of generic selection must have essential type that matches its standard type
- V2651. MISRA. Initializer using chained designators should not contain initializers without designators.
- V3224. Consider using an overload with 'IEqualityComparer', as it is present in similar cases for the same collection element type.
- V3225. A data reading method returns the number of bytes that were read and cannot return the value of -1.
- V5333. OWASP. Possible insecure deserialization vulnerability. Potentially tainted data is used to create an object during deserialization.
- V5334. OWASP. Possible server-side request forgery. Potentially tainted data is used in the URL.
- V6132. It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics.
PVS-Studio 7.37 (11 июня 2025)
- Механизм анализа помеченных данных (taint-анализа) в C++ анализаторе PVS-Studio теперь распространяется на диагностики поиска других типов ошибок: деления на ноль, выхода за границу буфера, побитового сдвига на недостоверное значение, знакового переполнения и передачи аргументом недостоверного значения. Данное изменение позволило анализатору находить потенциальные уязвимости в большем количестве сценариев.
- В C# и Java анализаторах PVS-Studio добавлен учёт помеченных данных при выходе за границу массива, определении переполнения и потенциального деления на 0.
- Улучшена работа C и C++ анализатора со стандартной библиотекой: улучшен разбор
brace-initializer-list для встроенных контейнеров, а также проаннотированы std::min, std::max, std::unique_ptr<T[]>::reset, std::unique_ptr<T[]>::release.
- В C и C++ анализаторе улучшена поддержка стандарта языка C23: добавлена поддержка ключевых слов
constexpr и alignas.
- В дополнение к возможности выбора версии стандарта MISRA C Coding Guidelines для плагина Visual Studio подобная возможность добавлена в плагины PVS-Studio для сред разработки Visual Studio Code, Qt Creator, CLion и Rider, а также для утилит командной строки
PVS-Studio_Cmd.exe и pvs-studio-analyzer.
- Поддержан анализ C++ и C# проектов на основе сборочной системы MSBuild, использующих формат решений SLNX.
- Плагин PVS-Studio для IDE Qt Creator портирован на комплект разработчика для операционной системы "Нейтрино" на Windows. Поддержана работа с Qt Creator 6 (Qt 5.14.2) из данного комплекта разработчика.
- Была добавлена документация об интеграции результатов анализа с помощью анализаторов PVS-Studio в систему управления информационной безопасностью Securitm.
- Добавлена возможность включения и выключения с помощью файлов конфигурации правил
.pvsconfig SAST-идентификаторов для сообщений анализатора, относящихся к потенциальным угрозам безопасности (Security Related Issues). Данные SAST-идентификаторы позволяют идентифицировать срабатывания анализатора, которые классифицируются как критические ошибки в стандарте ГОСТ Р 71207-2024, описывающем использование статических анализаторов в процессе безопасной разработки программного обеспечения. Подробнее о файлах конфигурации диагностик .pvsconfig можно прочитать в документации.
- [Breaking change] Изменено сообщение, выдаваемое диагностическим правилом V1077. Есть вероятность возникновения необходимости повторно подавить уже подавленные ранее предупреждения этого правила.
- [Breaking change] Из-за распространения механизма анализа помеченных данных на диагностические правила V557, V609, V610, V1083 и V575 возможно повторное возникновение ранее подавленных сообщений, выданных диагностическим правилом V1010.
- [Breaking change] Изменена команда для фильтрации сообщений о проблемах в работе анализатора в утилитах конвертации отчётов: для их включения необходимо добавить группу FAIL к маске фильтрации, использование нулевого уровня предупреждений любой группы диагностических правил более не поддерживается. Подробнее о маске фильтрации срабатываний можно прочитать в документации.
- V1118. Excessive file permissions can lead to vulnerabilities. Consider restricting file permissions.
- V3222. Potential resource leak. An inner IDisposable object might remain non-disposed if the constructor of the outer object throws an exception.
- V3223. Inconsistent use of a potentially shared variable with and without a lock can lead to a data race.
- V5331. OWASP. Hardcoded IP addresses are not secure.
- V5332. OWASP. Possible path traversal vulnerability. Potentially tainted data might be used to access files or folders outside a target directory.
- V5630. Possible cookie injection. Potentially tainted data is used to create a cookie.
- V6126. Native synchronization used on high-level concurrency class.
- V6127. Closeable object is not closed. This may lead to a resource leak.
- V6128. Using a Closable object after it was closed can lead to an exception.
- V6129. Possible deadlock due to incorrect synchronization order between locks.
- V6130. Integer overflow in arithmetic expression.
- V6131. Casting to a type with a smaller range will result in an overflow.
PVS-Studio 7.36 (9 апреля 2025)
- В C и C++ анализаторе PVS-Studio добавлена возможность задать версии стандартов MISRA C и MISRA C++. Выбрать используемую версию стандарта можно в настройках PVS-Studio плагина для Visual Studio. Поддерживаемые версии стандартов: MISRA C 2012, MISRA C 2023, MISRA C++ 2008.
- Добавлена документация по использованию анализатора PVS-Studio в сервисе для хранения исходного кода GitFlic, а также в DevSecOps платформах Hexway и AppSec.Hub.
- В C# анализаторе появилась возможность аннотировать библиотеки с помощью JSON синтаксиса пользовательских аннотаций. Подробнее об этом написано в нашей документации.
- Плагин PVS-Studio стал доступен для Qt Creator версий 16.x. Прекращена поддержка плагина для версий Qt Creator 10.x. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза.
- В кроссплатформенную утилиту для проверки C и C++ проектов
pvs-studio-analyzer добавлен новый флаг --apply-pvs-configs. С помощью него включается режим автоматического поиска и применения файлов конфигурации правил .pvsconfig для проверяемых исходных файлов. Сами файлы конфигурации правил ищутся в каталоге исходного файла и во всех родительских каталогах вплоть до корневой папки проекта, которая указывается с помощью нового флага --project-root. Подробнее об этом можно прочитать в нашей документации.
- Флаг
--analysis-paths в утилите командной строки pvs-studio-analyzer получил новый режим isolate-settings. Он позволяет изолировать настройки, задаваемые с помощью файлов конфигурации правил .pvsconfig внутри заданной директории. Настройки, лежащие в родительских для этой директории папках, в этом режиме игнорируются. Подробнее об этом можно прочитать в нашей документации. Также для данного режима были добавлены настройки для файла .pvsconfig: //V_ANALYSIS_PATHS isolate-settings и //V_ISOLATE_CURRENT_DIR. Подробнее об этом можно прочитать в соответствующем разделе документации.
- Настройки
//IGNORE_GLOBAL_PVSCONFIG и //CONFIG_PRIORITY из файлов конфигурации .pvsconfig теперь учитываются при анализе C и C++ проектов с помощью утилиты командной строки pvs-studio-analyzer. О работе этих настроек можно подробнее прочитать в нашей документации.
- В C и C++ анализаторе PVS-Studio улучшена поддержка стандартов C11 (квалификаторы
restrict и _Atomic и спецификаторы _Atomic(T) и _Thread_local) и C23 (спецификатор thread_local).
- Для работы утилиты командной строки CLMonitor.exe в режиме Wrap Compilers, который гарантирует перехват всех процессов компиляции, больше не требуются права администратора. Теперь для работы утилиты в этом режиме нужны только права доступа к ветке реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options. Подробнее об этом режиме можно прочитать в нашей документации.
- Была добавлена возможность указывать версию C# анализатора PVS-Studio в файлах конфигурации .pvsconfig, если на компьютере установлено несколько версий PVS-Studio. Ранее такая функциональность была доступна только для C и C++ анализатора. Подробнее об этой функциональности можно прочитать в нашей документации.
- В плагине для интегрированной среды разработки Visual Studio Code оптимизирован процесс загрузки отчётов, содержащих большое количество срабатываний анализатора.
- [Breaking change] При анализе C и C++ проектов на основе
compile_commands.json в утилите командной строки pvs-studio-analyzer теперь игнорируются все вызовы не компиляторов. Для работы с компиляторами, имеющими нестандартные имена, которые не определяются PVS-Studio по умолчанию, можно использовать флаг --compiler. Подробнее об этом можно узнать в соответствующем разделе нашей документации.
- [Breaking change] Минимальная рекомендуемая версия macOS для запуска анализатора PVS-Studio на процессорах с архитектурой x86-64 поднята до версии macOS Big Sur (11.1).
- V2634. MISRA. Features from <fenv.h> should not be used.
- V2635. MISRA. The function with the 'system' name should not be used.
- V2636. MISRA. The functions with the 'rand' and 'srand' name of <stdlib.h> should not be used.
- V2637. MISRA. A 'noreturn' function should have 'void' return type.
- V2638. MISRA. Generic association should list an appropriate type.
- V2639. MISRA. Default association should appear as either the first or the last association of a generic selection.
- V2640. MISRA. Thread objects, thread synchronization objects and thread-specific storage pointers should have appropriate storage duration.
- V2641. MISRA. Types should be explicitly specified.
- V2642. MISRA. The '_Atomic' specifier should not be applied to the incomplete type 'void'.
- V2643. MISRA. All memory synchronization operation should be executed in sequentially consistent order.
- V3218. Cycle condition may be incorrect due to an off-by-one error.
- 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. The result of the LINQ method with deferred execution is never used. The method will not be executed.
- V3221. Modifying a collection during its enumeration will lead to an exception.
- V5629. OWASP. Code contains invisible characters that may alter its logic. Consider enabling the display of invisible characters in the code editor.
- V5320. OWASP. Use of potentially tainted data in configuration may lead to security issues.
- V5321. OWASP. Possible LDAP injection. Potentially tainted data is used in a search filter.
- V5322. OWASP. Possible reflection injection. Potentially tainted data is used to select class or method.
- V5323. OWASP. Potentially tainted data is used to define 'Access-Control-Allow-Origin' header.
- V5324. OWASP. Possible open redirect vulnerability. Potentially tainted data is used in the URL.
- V5325. OWASP. Setting the value of the 'Access-Control-Allow-Origin' header to '*' is potentially insecure.
- V5326. OWASP. A password for a database connection should not be empty.
- V5327. OWASP. Possible regex injection. Potentially tainted data is used to create regular expression.
- V5328. OWASP. Using weak authorization checks could lead to security violations.
- V5329. OWASP. Using unsafe methods of file creation is not recommended because an attacker might access the files.
- V5330. OWASP. Possible XSS injection. Potentially tainted data might be used to execute a malicious script.
PVS-Studio 7.35 (12 февраля 2025)
- Команда PVS-Studio начала работу по увеличению покрытия стандарта MISRA C. В этом году мы планируем покрыть не менее 85% стандарта MISRA C, а также поддержать последнюю версию MISRA C 2023. Подробнее о поддержке стандартов MISRA в PVS-Studio можно прочитать здесь.
- Также ведётся работа по покрытию стандарта OWASP Top 10 2021 для Java анализатора. К этому релизу PVS-Studio для Java находит ошибки, соответствующие 7 категориям из 10.
- Плагин PVS-Studio стал доступен для Qt Creator версий 15.x. Прекращена поддержка плагина для версий Qt Creator 9.x. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза. В версии Qt Creator 15.0.0 наблюдаются проблемы с установкой плагинов через встроенный в IDE мастер установки. Подробнее об этом виде установки написано в нашей документации по ссылке.
- Режим анализа модифицированных файлов был добавлен в плагин для Visual Studio. В утилите командной строки
PVS-Studio_Cmd.exe был добавлен новый режим работы этого способа проверки, учитывающий неисправленные предупреждения и добавляющий файлы с ними на анализ помимо изменённых. Подробнее об этом можно прочитать в документации. Также был добавлен флаг для управления кэшами зависимостей компиляции в файл конфигурации анализатора .pvsconfig. Подробнее об этом в соответствующем разделе нашей документации.
- В C# анализаторе был оптимизирован анализ блоков кода c большим количеством идентификаторов переменных (500 и более). Ранее были возможны замедления анализатора в подобных ситуациях.
- Улучшили запуск PVS-Studio на системах с корейской локалью и при использовании корейских символов в путях и именах файлов.
- В плагинах PVS-Studio для CLion, Rider и Visual Studio Code была добавлена возможность посмотреть анализируемые исходные файлы в случае, когда предупреждение выдано не на сам файл, а на включённый в него заголовочный файл.
- Улучшена работа инкрементального анализа в плагине PVS-Studio для IntelliJ IDEA. Теперь инкрементальный анализ запускается не только при запуске сборки из интерфейса IntelliJ IDEA, но и при запуске сборки из интерфейсов сборочных систем.
- [Breaking change] Изменился внутренний формат записи кэшей зависимостей компиляции. Обратная совместимость со старым форматом сохранена.
- [Breaking change] Исправлено ошибочное поведение при использовании аргументов
--license-path в ядре Java анализатора и licensePath в плагинах PVS-Studio для Maven и Gradle. Теперь информация о лицензии записывается по указанному в параметре пути, а не по стандартному месту расположения лицензии. Подробнее можно прочитать в документации.
- [Breaking change] В версии 7.34 было ошибочно изменено поведение анализатора при отсутствии срабатывания в отчёте. В текущей версии возвращено создание пустого suppress файла, если в передаваемом на подавление отчёте (с помощью флага
--convert в значении toSuppress) нет срабатываний.
- [Breaking change] Ядро C и C++ анализатора теперь выдает SAST-идентификатор с указанием версии стандарта MISRA (2012 или 2023) в срабатываниях диагностических правил группы MISRA.
- V2626. MISRA. The 'sizeof' operator should not have an operand which is a function parameter declared as 'array of type'.
- V2627. MISRA. Function type should not be type qualified.
- V2628. MISRA. The pointer arguments to the Standard Library functions memcpy, memmove and memcmp should be pointers to qualified or unqualified versions of compatible types.
- V2629. MISRA. Pointer arguments to the 'memcmp' function should point to an appropriate type.
- V2630. MISRA. Bit field should not be declared as a member of a union.
- V2631. MISRA. Pointers to variably-modified array types should not be used.
- V2632. MISRA. Object with temporary lifetime should not undergo array-to-pointer conversion.
- V2633. MISRA. Identifiers should be distinct from macro names.
- 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 with a specific Unity Engine type 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.
- 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.
PVS-Studio 7.34 (11 декабря 2024)
- Анализатор PVS-Studio для операционных систем семейства macOS портирован на процессоры Apple Silicon с архитектурой ARM64. Скачать PVS-Studio можно на странице загрузок.
- В C# анализатор PVS-Studio добавлена поддержка проектов для .NET 9.
- В Java анализаторе PVS-Studio появился механизм для проведения taint-анализа. На его основе была создана первая диагностика — поиск SQL-инъекций. В следующем году в Java анализаторе будет сделан упор на SAST, покрытие списка наиболее распространённых потенциальных уязвимостей OWASP Top 10, а также будет добавлено больше taint-диагностик.
- В утилиты командной строки
PVS-Studio_Cmd и pvs-studio-dotnet был добавлен режим проверки модифицированных файлов, позволяющий автоматически обнаружить изменённые между запусками анализа исходные файлы. Данный режим является альтернативой инкрементальному анализу и может быть полезен при проверке Pull Request'ов. Подробнее о новом режиме можно прочитать в документации.
- В плагин PVS-Studio для Visual Studio Code и утилиту командной строки
plog-converter была добавлена возможность отображения критических ошибок согласно ГОСТ Р 71207-2024.
- Добавлена возможность загрузки отчёта PVS-Studio в веб-интерфейс для просмотра и агрегации результатов анализа CodeChecker. Поддержка PVS-Studio при установке CodeChecker из пакетного менеджера pip появится с выходом версии 6.25.0. Подробнее об интеграции можно прочитать в документации.
- Добавлена возможность гибкой настройки включения или выключения из анализа исходных файлов и файлов настроек
.pvsconfig. Также данный механизм можно будет использовать для проверки Unreal Engine проектов с помощью Unreal Build Tool, начиная с версии 5.5.2. Подробнее можно прочитать в документации.
- Анализаторы PVS-Studio были проверены на совместимость и корректную работу с операционными системами РЕД ОС 7.3 и РЕД ОС 8.
- [Breaking change] Изменились требования C# анализатора PVS-Studio на Windows. Для анализа .NET проектов теперь потребуется установка .NET 9 SDK. Для анализа .NET Standard и .NET Framework SDK-style проектов также потребуется .NET SDK 9. Требования по проверке не изменились для классических .NET Framework проектов: если в системе установлены Visual Studio или MSBuild версий 2017, 2019 или 2022, достаточно наличия в системе .NET Framework 4.7.2. Для классических .NET Framework проектов в системах с Visual Studio или MSBuild версий 2015 или более старых теперь также будет требоваться присутствие .NET 9 SDK. При использовании silent режима установки на Windows, если необходимо запускать анализ на проектах, которые теперь требуют наличия в системе .NET 9 SDK, потребуется указать компонент DOTNET для установки .NET 9 SDK, если SDK не был установлен в системе отдельно.
- [Breaking change] В утилите командной строки
pvs-studio-analyzer изменено поведение флага --sourcetree-root (-r). При подмене путей в генерируемом отчёте путь до базовой директории проверяется на существование. Если часть путей не получилось подменить, то выдаётся сообщение с предупреждением, но код возврата остаётся равным 0. Если же не получилось подменить ни один путь, то помимо сообщения с предупреждением код возврата будет ненулевым.
- V1116. Creating an exception object without an explanatory message may result in insufficient logging.
- V1117. The declared function type is cv-qualified. The behavior when using this type is undefined.
- V2022. Implicit type conversion from integer type to enum type.
- V5014. OWASP. Cryptographic function is deprecated. Its use can lead to security issues. Consider switching to an equivalent newer function.
- V3207. The 'not A or B' logical pattern may not work as expected. The 'not' pattern is matched only to the first expression from the 'or' pattern.
- V3208. Unity Engine. Using 'WeakReference' instance with 'UnityEngine.Object' is not supported. GC will not properly reclaim memory from this object because it is linked to a native object.
- V3209. Unity Engine. Re-applying await to an Awaitable object will result in an exception.
- V3210. Unity Engine. Unity does not allow removing the 'Transform' component using 'Destroy' or 'DestroyImmediate' methods. The method call will be ignored.
- V4007. Unity Engine. Avoid creating and destroying UnityEngine objects in performance-sensitive context. Consider activating and deactivating them instead.
- V6123. Modified value of the operand is not used after the increment/decrement operation.
- V6124. Converting an integer literal to the type with a smaller value range will result in overflow.
- V6125. Calling the 'wait', 'notify', and 'notifyAll' methods outside of synchronized context will lead to 'IllegalMonitorStateException'.
- V5309. OWASP. Possible SQL injection. Potentially tainted data is used to create SQL command.
PVS-Studio 7.33 (7 октября 2024)
- Плагин PVS-Studio для IDE Qt Creator портирован на комплект разработчика для операционной системы "Нейтрино". Поддержана работа с Qt Creator 6.0.2 (Qt 5.15) из данного комплекта разработчика.
- В утилиту командной строки PVS-Studio_Cmd была добавлена возможность отображения критических ошибок согласно ГОСТ Р 71207-2024. Для этого необходимо включить настройку "Security Related Issues" в плагине PVS-Studio для Visual Studio.
- В C++ анализаторе PVS-Studio было уменьшено потребление памяти при анализе инстанцирования шаблонов, а также инициализации большого количества глобальных переменных строковыми литералами.
- В C++ анализаторе PVS-Studio было уменьшено количество ложных срабатываний при анализе кода, относящегося к проектам Unreal Engine. Унифицирована обработка встроенных функций компилятора __builtin_expect и доработана обработка выражений явных приведений к bool. Это улучшило анализ check-функций, управляемых макросом DO_CHECK в проектах Unreal Engine.
- Для режима интеграции PVS-Studio с Unreal Engine была добавлена поддержка системы распределённой сборки SN-DBS. Подробнее об этом можно прочитать в нашей документации об интеграции анализатора PVS-Studio с Unreal Engine. Данные изменения актуальны для версии Unreal Engine 5.5.
- В C# анализаторе PVS-Studio была реализована возможность проставления пользовательских аннотаций функций и типов в формате JSON по аналогии со схожей функциональностью C++ анализатора PVS-Studio. Подробнее об этой функциональности можно прочитать в нашей документации.
- Была исправлена ошибка работы плагина PVS-Studio для Visual Studio при его использовании с Visual Studio версий 17.12 и выше.
- Были исправлены проблемы работы С# анализатора PVS-Studio в системе с установленным .NET версий 8.0.400 и выше.
- [Breaking change] Были подняты версии форматов отчётов анализаторов PVS-Studio .json и .plog до версий 3 и 9 соответственно. Теперь у C# проектов, имеющих несколько целевых фреймворков (target framework), имя фреймворка не приписывается к имени проекта.
- [Breaking change] В формат JSON отчёта C++ анализатора PVS-Studio было добавлено новое поле analyzedSourceFiles. В данное поле записывается дополнительная информация о том, в какой единице трансляции произошло срабатывание диагностического правила. Это полезно в случаях, когда потенциальная ошибка содержится в заголовочных файлах.
- [Breaking change] Версия JSON-схемы пользовательских аннотаций функций и типов PVS-Studio поднята до версии 2. В схему была добавлена новая сущность language. Она позволяет использовать пользовательские аннотации только в анализаторе для конкретного языка. Помимо этого, было изменено значение поля id.
- [Breaking change] В системе пользовательских аннотаций функций и типов PVS-Studio комментарий //V_PVS_ANNOTATIONS $path для включения пользовательских аннотаций помечен как устаревший. В качестве замены предлагается использовать комментарий вида //V_PVS_ANNOTATIONS, language: $lang, path: $path.
- [Breaking change] Минимальные поддерживаемые версии IDE JetBrains IDEA, CLion и Rider были подняты до версии 2022.2.
- [Breaking change] Изменено разрешение путей в плагине PVS-Studio для сборочной системы Gradle. Теперь относительные пути из конфигурации разрешаются относительно директории проекта, а не относительно директории gradle daemon.
- [Breaking change] Была удалена возможность конвертации отчёта PVS-Studio при помощи утилит plog converter в специфичный для Visual Studio Code формат SARIF, используемый в плагине SARIF Viewer. Конвертация в соответствующий стандарту отчёт формата SARIF сохранена.
- V1113. Potential resource leak. Calling the 'memset' function will change the pointer itself, not the allocated resource. Check the first and third arguments.
- V1114. Suspicious use of 'dynamic_cast' when working with COM interfaces. Consider using the 'QueryInterface' member function.
- V1115. Function annotated with the 'pure' attribute has side effects.
- V3204. The expression is always false due to implicit type conversion. Overflow check is incorrect.
- V3205. Unity Engine. Improper creation of 'MonoBehaviour' or 'ScriptableObject' object using the 'new' operator. Use the special object creation method instead.
- V3206. Unity Engine. A direct call to the coroutine-like method will not start it. Use the 'StartCoroutine' method instead.
- V4006. Unity Engine. Multiple operations between complex and numeric values. Prioritizing operations between numeric values can optimize execution time.
- V6118. The original exception object was swallowed. Cause of original exception could be lost.
- V6119. The result of '&' operator is always '0'.
- V6120. The result of the '&' operator is '0' because one of the operands is '0'.
- V6121. Return value is not always used. Consider inspecting the 'foo' method.
- V6122. The 'Y' (week year) pattern is used for date formatting. Check whether the 'y' (year) pattern was intended instead.
PVS-Studio 7.32 (06 августа 2024)
- В связи с изменениями в API платформы SonarQube был разработан новый плагин для интеграции анализатора PVS-Studio в платформу SonarQube. Начиная с версии SonarQube 10.1, необходимо использовать новую версию плагина. Версия плагина PVS-Studio для более ранних версий SonarQube продолжает поддерживаться и получать обновления параллельно с новым плагином.
- Добавлена поддержка интеграции анализатора PVS-Studio в проекты, использующие сборочные системы Bazel и Scons.
- Плагин PVS-Studio стал доступен для Qt Creator версий 14.x. Прекращена поддержка плагина для версий Qt Creator 8.x. Мы стараемся обеспечивать обратную совместимость по поддержке последних версий плагинов для всех версий Qt Creator за два года с момента каждого релиза.
- Оптимизировано потребление памяти С++ анализатора при анализе инстанцирования шаблонов. При этом сохранена возможность отключения анализа их инстанцирования с помощью флага настройки DisableTemplateInstantiationCpp в плагине PVS-Studio для Visual Studio или настройки //V_DISABLE_TEMPLATE_INSTANTIATION в файлах конфигурации pvsconfig в случае, если потребление памяти анализатором всё ещё остаётся избыточно высоким.
- Улучшен разбор стандартной библиотеки Microsoft Visual C++, используемой в версии Visual Studio 17.10.
- В C++ анализаторе PVS-Studio добавлена возможность разметки источников и приёмников при анализе помеченных (taint) данных. Она реализована в механизме пользовательских аннотаций в формате JSON.
- Добавлена возможность исключения из анализа проектов при анализе проектов для сборочной системы MSBuild с помощью файлов конфигурации анализатора .pvsconfig. Эта возможность реализуется включением флага V_EXCLUDE_PROJECT в файл конфигурации диагностик pvsconfig.
- Добавлена возможность использования файлов конфигурации диагностик pvsconfig в плагине PVS-Studio для IDE JetBrains CLion.
- [Breaking change] Изменён синтаксис пользовательских аннотаций в формате JSON для С++ анализатора PVS-Studio. Использование атрибутов nullable_initialized и nullable_uninitialized устарело. Вместо них введены атрибуты возвращаемого объекта not_null, maybe_null, always_null.
- [Breaking change] Изменён приоритет флага --sourceTreeRoot в утилите PVS-Studio_Cmd.exe, задающего корневую часть пути для конвертации путей из абсолютных в относительные. Теперь этот флаг имеет приоритет над настройками UseSolutionDirAsSourceTreeRoot в конфигурационном файле Settings.xml и //V_SOLUTION_DIR_AS_SOURCE_TREE_ROOT в файлах конфигурации диагностик pvsconfig.
- V1111. The index was used without check after it was checked in previous lines.
- V1112. Comparing expressions with different signedness can lead to unexpected results.
- V2021. Using assertions may cause the abnormal program termination in undesirable contexts.
- V3201. Return value is not always used. Consider inspecting the 'foo' method.
- V3202. Unreachable code detected. The 'case' value is out of the range of the match expression.
- V3203. Method parameter is not used.
- V6115. Not all Closeable members are released inside the 'close' method.
- V6116. The class does not implement the Closeable interface, but it contains the 'close' method that releases resources.
- V6117. Possible overflow. The expression will be evaluated before casting. Consider casting one of the operands instead.
PVS-Studio 7.31 (11 июня 2024)
- Добавлена возможность установки настроек в конфигурационных файлах .pvsconfig в зависимости от версии анализатора, использующего данные файлы. Эта возможность доступна в С++ анализаторе PVS-Studio.
- В утилите pvs-studio-analyzer была расширена система анализа отдельных файлов с помощью флага --source-files. Теперь использование утилиты в условиях отличия кэша зависимостей компиляций для C и C++ файлов от структуры проекта стало более удобным. Такая ситуация может возникнуть, например, при частом переключении веток в одном рабочем пространстве или запуске анализа на разных версиях проекта.
- В систему пользовательских аннотаций C++ анализатора была добавлена возможность задавать диапазон возможных и невозможных значений для целочисленных параметров функций.
- Была доработана и актуализирована документация об использовании анализаторов PVS-Studio в облачной CI-системе CircleCI.
- V1108. Constraint specified in a custom function annotation on the parameter is violated.
- V1109. Function is deprecated. Consider switching to an equivalent newer function.
- V1110. Constructor of a class inherited from 'QObject' does not use a pointer to a parent object.
- V3199. Index from end operator used with the value that is less than or equal to zero. Index is out of bound.
- V3200. Possible overflow. The expression will be evaluated before casting. Consider casting one of the operands instead.
- V6113. Suspicious division. Absolute value of the left operand is less than the value of the right operand.
- V6114. The 'A' class containing Closeable members does not implement the Closeable interface.
PVS-Studio 7.30 (12 апреля 2024)
- В C++ анализаторе PVS-Studio был реализован механизм пользовательских аннотаций —способ разметки типов и функций в формате JSON с целью дать анализатору дополнительную информацию. Благодаря этой информации анализатор может находить больше ошибок в коде. Такие аннотации необходимо поместить в специальный файл формата JSON. С помощью этих аннотаций возможно, помимо прочего, пометить функцию как опасную для использования, определить собственный тип как nullable и т.п. Больше об этом режиме можно узнать в документации.
- Было внесено множество улучшений в интеграцию PVS-Studio и Unreal Engine, доступных начиная с версии UE 5.4:
- Реализована многофайловая навигация по предупреждениям, содержащимся в отчёте анализатора PVS-Studio;
- Исправлена ошибка, приводящая к падению анализа в Unreal Engine 5.3 при запуске анализа через флаг компиляции -StaticAnalyzer=PVSStudio.
- Поддержка отключения стандартного вывода Unreal Build Tool в консоль при проведении анализа. Это может значительно сократить время постобработки отчёта анализатора в проектах с большим количеством предупреждений;
- Анализ автоматически сгенерированных файлов .gen.cpp теперь по умолчанию отключён. Включение анализа таких файлов возможно через специальную настройку;
- Добавлена настройка, позволяющая запускать анализатор только на файлах проекта, пропуская модуль ядра Unreal Engine. Использование этой настройки позволяет значительно ускорить процесс анализа.
- Была расширена система анализа отдельных файлов с помощью флага --sourceFiles и повторной генерации кэша зависимостей проекта. Теперь данный режим устойчив к ситуациям, когда кэш зависимостей находится в состоянии, не соответствующем структуре проекта. Такое может случиться, например, в случае использования множественных веток в системе контроля версий. Помимо этого, была добавлена возможность запуска с полным обновлением кэша: это позволяет проводить анализ с полностью корректным кэшем зависимостей в случае, если поддержание его в актуальном состоянии было невозможно.
- Была добавлена поддержка GNU RISC-V GCC Toolchain для платформы RISC-V для C++ анализатора PVS-Studio.
- Для C++ анализатора PVS-Studio был реализован анализ стандартного типа bool, появившегося в стандарте C23 языка С. Это улучшило поддержку MISRA Essential Type Model, а также диагностик, основанных на MISRA Essential Type Model.
- Для C++ анализатора PVS-Studio была улучшена работа со стандартной библиотекой С++, а также добавлена поддержка большего количества интринзиков компилятора, например, __add_lvalue_reference, __add_pointer, __add_rvalue_reference и других. Это привело к улучшению качества работы диагностик.
- Плагин PVS-Studio теперь доступен для Qt Creator версии 13.
- V1105. Suspicious string modification using the 'operator+='. The right operand is implicitly converted to a character type.
- V1106. Qt. Class inherited from 'QObject' does not contain a constructor that accepts a pointer to 'QObject'.
- V1107. Function was declared as accepting unspecified number of parameters. Consider explicitly specifying the function parameters list.
- V3196. Parameter is not utilized inside the method body, but an identifier with a similar name is used inside the same method.
- V3197. The compared value inside the 'Object.Equals' override is converted to a different type that does not contain the override.
- V3198. The variable is assigned the same value that it already holds.
- V6110. Using an environment variable could be unsafe or unreliable. Consider using trusted system property instead.
- V6111. Potentially negative value is used as the size of an array.
- V6112. Calling the 'getClass' method repeatedly or on the value of the '.class' literal will always return the instance of the 'Class' type.
PVS-Studio 7.29 (7 февраля 2024)
- Добавили поддержку анализа проектов на языке Java в плагине PVS-Studio для Visual Studio Code.
- В С++ анализаторе реализована поддержка умных указателей из библиотеки Boost: boost::unique_ptr и boost::shared_ptr. Теперь анализатор PVS-Studio определяет ошибки наподобие разыменовывания нулевого указателя при использовании данных классов.
- Добавлен режим учёта хэша строки исходного кода, вызвавшей срабатывание, при разметке ложно-позитивных срабатываний. Это позволяет понять, менялась ли строка кода с момента отметки срабатывания, как ложного. При использовании нового режима разметки, в случае наличия изменений в коде, отметка ложного срабатывания перестанет подавлять предупреждение анализатора. Поддержка этой функциональности присутствует в плагинах PVS-Studio для Microsoft Visual Studio.
- Добавили поддержку плагина PVS-Studio для Qt Creator 12 на операционных системах семейства macOS.
- V839. Decreased performance. Function returns a constant value. This may interfere with the move semantics.
- V1104. Priority of the 'M' operator is higher than that of the 'N' operator. Possible missing parentheses.
- V2625. MISRA. Identifier with external linkage should be unique.
- V3194. Calling 'OfType' for collection will return an empty collection. It is not possible to cast collection elements to the type parameter.
- V3195. Collection initializer implicitly calls 'Add' method. Using it on member with default value of null will result in null dereference exception.
- V6108. Do not use real-type variables in 'for' loop counters.
- V6109. Potentially predictable seed is used in pseudo-random number generator.
PVS-Studio 7.28 (5 декабря 2023)
- В анализаторы PVS-Studio добавлена поддержка работы на платформе ARM на операционной системе Windows. Поддержка работает в режиме совместимости с архитектурой x64. В будущем году планируется реализация также и нативной ARM версии анализатора для операционных систем семейства macOS.
- В PVS-Studio C# поддержали анализ проектов, использующих .NET 8. Сам C# анализатор под Linux и macOS теперь работает на .NET 8.
- Добавлена поддержка относительных путей в SARIF отчётах.
- При проверке Unreal Engine проектов с помощью PVS-Studio зачастую возникают проблемы с избыточным потреблением памяти и замедлением анализа, вызываемые использованием системы объединения единиц трансляции в один файл (Unity Build). Несмотря на то, что использование такой системы может положительно сказаться на времени компиляции, большой размер файла может привести к повышенному потреблению ресурсов, необходимых для анализа. Мы дополнили документацию по анализу Unreal Engine проектов пунктом про настройку запуска анализа без использования Unity Build, с возможностью сохранения использования этого режима для сборки проекта.
- Добавили поддержку плагина PVS-Studio для Qt Creator версии 12.0.x
- Добавили поддержку wildcard-паттернов в командах компиляции для утилиты мониторинга сборок на Windows (CLMonitor).
- В C# анализаторе доработана и унифицирована с другими анализаторами возможность включения и отключения отдельных диагностик с помощью файлов настройки анализатора (.pvsconfig). Подробнее о .pvsconfig можно прочитать в документации.
- В C# анализаторе улучшена работа с параметрами, имеющими null в качестве значения по умолчанию. Это позволяет диагностике V3080 находить больше проблем, связанных с разыменованием нулевых ссылок.
- Исправлена проблема совместной работы Visual Studio плагинов PVS-Studio и Visual Assist.
- V1103. The values of padding bytes are unspecified. Comparing objects with padding using 'memcmp' may lead to unexpected result.
- V2624. MISRA. The initializer for an aggregate or union should be enclosed in braces.
- V3193. Data processing results are potentially used before asynchronous output reading is complete. Consider calling 'WaitForExit' overload with no arguments before using the data.
- V4005. Unity Engine. The expensive operation is performed inside method or property. Using such member in performance-sensitive context can lead to decreased performance.
- V6107. The constant NN is being utilized. The resulting value could be inaccurate. Consider using the KK constant.
PVS-Studio 7.27 (11 октября 2023)
- Плагин PVS-Studio для Visual Studio Code теперь поддерживает работу с проектами под .NET. Функционал включает в себя возможности запуска анализа, просмотра отчёта, подавления предупреждений и т.д. Подробности в документации.
- Улучшен механизм разбора кода стандартной библиотеки C++ на операционных системах семейства macOS.
- Улучшен алгоритм автоматического выбора количества одновременно анализируемых файлов. Теперь учитываются не только доступные логические ядра, но и объём доступной в системе оперативной памяти. Это позволяет задавать более оптимальные значения для настроек по умолчанию.
- В плагине для Rider подержан запуск анализа в режиме прямого открытия проектов Unreal Engine. Также плагин стал доступен для Rider 2023.2. Документация доступна по ссылке.
- В файле конфигурации pvsconfig теперь можно указать, что пути в отчёте анализатора строятся относительно директории решения. Новая настройка поддерживается как при запуске анализа, так и при просмотре результатов работы анализатора в IDE плагинах. Это упрощает работу с отчётом в случае его передачи между машинами с разной структурой директорий. Документация по pvsconfig доступна здесь.
- Утилита CLMonitor теперь поддерживает platform toolset v80 и v90.
- Полностью переработана документация по Java анализатору. Теперь каждому сценарию работы с анализатором посвящён отдельный раздел: интеграция с Maven, интеграция с Gradle, работа в IntelliJ IDEA и Android Studio, а также работа с ядром анализатора из командной строки.
- V1102. Unreal Engine. Violation of naming conventions may cause Unreal Header Tools to work incorrectly.
- V2623. MISRA. Macro identifiers should be distinct.
- V3192. Type member is used in the 'GetHashCode' method but is missing from the 'Equals' method.
- V4004. Unity Engine. New array object is returned from method and property. Using such member in performance-sensitive context can lead to decreased performance.
PVS-Studio 7.26 (9 августа 2023)
- В плагине PVS-Studio для Visual Studio Code появилась возможность анализа C и С++ проектов, использующих сборочную систему CMake. Также добавлен функционал задания baseline-уровня предупреждений, позволяющий "очистить" старый код проекта от срабатываний PVS-Studio и начать использовать анализ только на коде, написанном после внедрения анализатора.
- Плагин PVS-Studio для Qt Creator теперь позволяет проверять проекты, ориентированные на QMake, CMake или Qbs. Кроме того, стало доступным подавление срабатываний через suppress-файлы. С документацией по плагину можно ознакомиться тут.
- Библиотека Spoon, используемая Java-анализатором для разбора кода, обновлена до версии 10.3.0. Это позволяет проверять проекты, использующие JDK 20 и языковые конструкции Java 20, сохраняя обратную совместимость со всеми предыдущими версиями.
- Результаты работы анализаторов PVS-Studio теперь можно интегрировать с DefectDojo — системой агрегации и управления результатами работы инструментов обеспечения безопасности. Документация по теме здесь.
- C# анализатор теперь учитывает атрибуты 'NotNullWhen' и 'NotNullIfNotNull' в проектах, использующих nullable context.
- В C++ анализаторе был доработан механизм пользовательского аннотирования функций. Теперь можно писать аннотации для функций, находящихся на любом уровне вложенности. Кроме того, при аннотировании допускается использование имени функции без указания класса и пространства имён. Инструкция по написанию аннотаций доступна здесь.
- Страница классификации предупреждений PVS-Studio согласно списку наиболее опасных и распространённых потенциальных уязвимостей CWE Top 25 обновлена до редакции 2023 года. Анализатор позволяет обнаруживать 64% типов уязвимостей из нового списка.
- V838. Temporary object is constructed during lookup in ordered associative container. Consider using a container with heterogeneous lookup to avoid construction of temporary objects.
- V1100. Unreal Engine. Declaring a pointer to a type derived from 'UObject' in a class that is not derived from 'UObject' is dangerous. The pointer may start pointing to an invalid object after garbage collection.
- V1101. Changing the default value of a virtual function parameter in a derived class may result in unexpected behavior.
- V3191. Iteration through collection makes no sense because it is always empty.
- V4002. Unity Engine. Avoid storing consecutive concatenations inside a single string in performance-sensitive context. Consider using StringBuilder to improve performance.
- V4003. Unity Engine. Avoid capturing variable in performance-sensitive context. This can lead to decreased performance.
PVS-Studio 7.25 (7 июня 2023)
- Переработана документация по анализу в режиме коммитов и слияния веток (pull/merge requests). Также появились отдельные страницы, посвящённые использованию анализатора в AppVeyor и Buddy.
- Добавлена инструкция по интеграции результатов работы C# анализатора в SonarQube под Linux. Найти её можно здесь.
- Плагин PVS-Studio для Qt Creator теперь доступен для версий 10.0.x, а плагин для Rider теперь поддерживает версии 2022.2.3 и выше.
- Обновлены используемые анализатором версии библиотек MSBuild и Roslyn. Это позволило решить проблемы анализа C# проектов, в которых с помощью атрибутов производится генерация кода.
- Исправлено падение производительности анализа на процессорах Intel 12 поколения. Это улучшение актуально при анализе C++ проектов для сборочной системы MSBuild.
- Добавлены новые возможности файлов настройки анализа и диагностических правил (pvsconfig): указание приоритета подключения этих файлов, активация отдельных диагностик (только для C++), а также возможность игнорировать глобальные настройки из Settings.xml (только при работе через Visual Studio или PVS-Studio_Cmd.exe). Подробности в документации.
- V837. The 'emplace' / 'insert' function does not guarantee that arguments will not be copied or moved if there is no insertion. Consider using the 'try_emplace' function.
- V1098. The 'emplace' / 'insert' function call contains potentially dangerous move operation. Moved object can be destroyed even if there is no insertion.
- V1099. Using the function of uninitialized derived class while initializing the base class will lead to undefined behavior.
- V2020. The loop body contains the 'break;' / 'continue;' statement. This may complicate the control flow.
- V3190. Concurrent modification of a variable may lead to errors.
- V4001. Unity Engine. Boxing inside a frequently called method may decrease performance.
PVS-Studio 7.24 (5 апреля 2023)
- Теперь анализатор лучше понимает особенности сравнения с 'null' в проектах, использующих игровой движок Unity. Ложных срабатываний в таких проектах стало гораздо меньше, что позволяет сконцентрироваться на работе с полезными предупреждениями.
- Улучшена поддержка C# 9: теперь анализатор учитывает, что выражения с постфиксом '!' (null-forgiving operator) не возвращают 'null'. Однако, вне зависимости от наличия постфикса анализатор продолжит выдавать предупреждения на разыменования выражений, значения которых точно равны 'null'.
- В плагине для Visual Studio был серьёзно расширен интерфейс для работы с файлами подавления (*.suppress). Теперь можно иметь несколько таких файлов в каждом проекте, просматривать предупреждения из выбранных suppress-файлов, перемещать срабатывания из одного suppress-файла в другой и т. д. Подробности в документации.
- В утилитах PVS-Studio_Cmd.exe и pvs-studio-dotnet появился новый режим suppression, позволяющий подавлять предупреждения по кодам диагностик, группе или путям к файлам, а также дающий возможность добавления новых suppress-файлов в проект и многое другое. Подробнее о новом режиме можно прочитать в документации.
- Улучшено нахождение специализаций шаблонов классов при работе диагностик C++ анализатора PVS-Studio.
- V1095. Usage of potentially invalid handle. The value should be non-negative.
- V1096. Variable with static storage duration is declared inside the inline function with external linkage. This may lead to ODR violation.
- V1097. Line splice results in a character sequence that matches the syntax of a universal-character-name. Using this sequence lead to undefined behavior.
- V3187. Parts of an SQL query are not delimited by any separators or whitespaces. Executing this query may lead to an error.
- V3188. The value of an expression is a potentially destroyed Unity object or null. Member invocation on this value may lead to an exception.
- V3189. The assignment to a member of the readonly field will have no effect when the field is of a value type. Consider restricting the type parameter to reference types.
PVS-Studio 7.23 (8 февраля 2023)
- Плагин PVS-Studio стал доступен для Qt Creator версий 9.0.x. Также его можно теперь использовать не только под Windows и Linux, но и под macOS на архитектуре x86-64.
- В документацию добавлено описание файла конфигурации Settings.xml, предназначенного для настройки анализа в IDE плагинах PVS-Studio.
- Исправлена проблема запуска Java анализатора PVS-Studio из-за ненайденных библиотек зависимостей на некоторых дистрибутивах Linux.
- Теперь CMake модуль корректно работает на проектах, использующих генератор NMake и содержащих большое количество файлов.
- V1093. The result of the right shift operation will always be 0. The right operand is greater than or equal to the number of bits in the left operand.
- V1094. Conditional escape sequence in literal. Its representation is implementation-defined.
- V3184. The argument's value is greater than the size of the collection. Passing the value into the 'Foo' method will result in an exception.
- V3185. An argument containing a file path could be mixed up with another argument. The other function parameter expects a file path instead.
- V3186. The arguments violate the bounds of collection. Passing these values into the method will result in an exception.
PVS-Studio 7.22 (7 декабря 2022)
- Выпустили плагин PVS-Studio для Visual Studio Code. В нём можно работать с отчётами анализатора: смотреть предупреждения, фильтровать их и т. п. Запускать анализ кода пока нельзя — планируем добавить эту возможность в следующих релизах. Документация — здесь.
- Выпустили плагин PVS-Studio для Qt Creator. Функциональность та же, что и у плагина для Visual Studio Code: можно работать с отчётами, но анализ пока запускать нельзя. Документация — здесь.
- Улучшили механизм Best Warnings: доработали алгоритмы и скорректировали "веса" диагностик — выборка самых интересных предупреждений должна стать лучше. Поменяли интерфейс: кнопка фильтрации теперь расположена на основной панели главного окна PVS-Studio. Если нужно, её можно скрыть в настройках (опция "Show Best Warnings Button"). Обновлённая документация о Best Warnings — по ссылке.
- Best Warnings теперь доступен не только в плагине для Visual Studio, но и в утилите C and C++ Compiler Monitoring UI, а также в плагинах для IntelliJ IDEA, Rider, CLion.
- В PVS-Studio C# поддержали анализ проектов, использующих .NET 7 и C# 11. Сам C# анализатор под Linux и macOS теперь работает на .NET 7.
- С помощью C# анализатора теперь можно проверять блоки @code в .razor файлах. Это поможет проводить более глубокий анализ веб-проектов.
- В утилитах PlogConverter и plog-converter доступны новые возможности фильтрации отчетов анализатора. Можно отфильтровать предупреждения и оставить только те, которые выданы на определённые файлы (флаг --includePaths). Можно сделать обратное: исключить из отчёта предупреждения, выданные на указанные файлы (--excludePaths). Подробности описали в документации.
- V836. Decreased performance. Unnecessary copying is detected when declaring a variable. Consider declaring the variable as a reference.
- V2018. Cast should not remove 'const' qualifier from the type that is pointed to by a pointer or a reference.
- V2019. Cast should not remove 'volatile' qualifier from the type that is pointed to by a pointer or a reference.
- V3183. Code formatting implies that the statement should not be a part of the 'then' branch that belongs to the preceding 'if' statement.
- V5626. OWASP. Possible ReDoS vulnerability. Potentially tainted data is processed by regular expression that contains an unsafe pattern.
- V5627. OWASP. Possible NoSQL injection. Potentially tainted data is used to create query.
- V5628. OWASP. Possible Zip Slip vulnerability. Potentially tainted data is used in the path to extract the file.
PVS-Studio 7.21 (11 октября 2022)
- Добавили возможность конвертации результатов работы анализаторов PVS-Studio в отчёт, совместимый с GitLab Code Quality. В документации описали, как это сделать.
- Продолжаем улучшать интеграцию PVS-Studio с Unreal Engine. Сделали pull request, который позволит использовать больше настроек анализатора при работе с UE-проектами. Например, можно будет указывать таймаут для анализа файлов из UE-проекта. Изменения уже закоммичены в код движка и будут доступны в следующей версии Unreal Engine.
- Unreal Engine проекты теперь можно проверять не только на Windows, но и на Linux. Подробности описали в документации.
- PVS-Studio теперь лучше работает с большим количеством типов, специфичных для Unreal Engine.
- Собрали на отдельной странице документации всю информацию о файлах конфигурации диагностик (.pvsconfig-файлы).
- Добавили возможность автоматически фильтровать предупреждения анализатора, сообщения которых содержат указанный текст. Это позволит подавлять предупреждения конкретных диагностик по шаблону, не отключая диагностики целиком. Описать такой фильтр можно в .pvsconfig-файлах (C++, C#) или прямо в коде (только C++).
- Плагин PVS-Studio для Visual Studio теперь поддерживает работу с файлами подавления в формате JSON, который раньше поддерживался только в Linux и macOS утилитах. Это упрощает кроссплатформенные сценарии работы с подавленными предупреждениями. Внедрить PVS-Studio в кроссплатформенные проекты с legacy-кодом также станет легче.
- V1090. The 'std::uncaught_exception' function is deprecated since C++17 and is removed in C++20. Consider replacing this function with 'std::uncaught_exceptions'.
- V1091. The pointer is cast to an integer type of a larger size. Casting pointer to a type of a larger size is an implementation-defined behavior.
- V1092. Recursive function call during the static/thread_local variable initialization might occur. This may lead to undefined behavior.
- V3178. Calling method or accessing property of potentially disposed object may result in exception.
- V3179. Calling element access method for potentially empty collection may result in exception.
- V3180. The 'HasFlag' method always returns 'true' because the value '0' is passed as its argument.
- V3181. The result of '&' operator is '0' because one of the operands is '0'.
- V3182. The result of '&' operator is always '0'.
PVS-Studio 7.20 (10 августа 2022)
- В Unreal Engine 5.0.3 исправили баг с поиском PVS-Studio: теперь анализ можно проводить без workaround'ов.
- Улучшили анализ проектов на основе Unreal Engine. PVS-Studio теперь выдаёт меньше ложных предупреждений и больше знает о специфичных для движка типах. Например, об аналогах контейнеров из стандартной библиотеки C++.
- PVS-Studio теперь умеет искать зависимости с известными уязвимостями в C# проектах. Для этого он выполняет анализ компонентного состава ПО (SCA, Software Composition Analysis). Подробнее можно почитать в документации к диагностическому правилу V5625.
- PVS-Studio покрывает все категории из списка OWASP Top 10 2021. Последнюю, А06, мы покрыли, реализовав SCA. На специальной странице можно посмотреть, какие диагностические правила анализатора ищут дефекты безопасности из каждой категории OWASP Top 10 2021.
- Для кроссплатформенного анализа C и C++ проектов используются специальные утилиты: pvs-studio-analyzer и CompilerCommandsAnalyzer. Теперь они лучше определяют компиляторы, которые используется в проекте. Если понять тип компилятора не удастся, указать его можно явно. Это особенно полезно в сфере embedded-разработки, где компиляторы имеют множество разных имён. Подробнее можно почитать здесь: флаг '--compiler'.
- В эти же утилиты (pvs-studio-analyzer и CompilerCommandsAnalyzer) мы внесли ряд улучшений, чтобы сделать кроссплатформенную проверку C и C++ проектов удобнее. Сценарии их использования, флаги запуска и коды возврата описали в новом разделе документации.
- Поддержали анализ проектов на основе базы данных компиляции (compile_commands.json), созданной в Qt Creator. Здесь можно прочитать, как её сгенерировать.
- Поддержали последние версии IDE от JetBrains (Rider, CLion, IntelliJ IDEA) – 2022.2.
- V1086. Call of the 'Foo' function will lead to buffer underflow.
- V1087. Upper bound of case range is less than its lower bound. This case may be unreachable.
- V1088. No objects are passed to the 'std::scoped_lock' constructor. No locking will be performed. This can cause concurrency issues.
- V1089. Waiting on condition variable without predicate. A thread can wait indefinitely or experience a spurious wake up.
- V3177. Logical literal belongs to second operator with a higher priority. It is possible literal was intended to belong to '??' operator instead.
- V5624. OWASP. Use of potentially tainted data in configuration may lead to security issues.
- V5625. OWASP. Referenced package contains vulnerability.
PVS-Studio 7.19 (8 июня 2022)
- Обновлена документация об использовании PVS-Studio для проверки проектов, использующих игровой движок Unreal Engine. Обновлённая версия описывает различия при настройке анализа для разных версий движка, настройки исключения файлов из анализа, интеграции с IDE, а также подавлении срабатываний анализатора на legacy коде. Важно: несмотря на то, что PVS-Studio можно использовать с последними версиями Unreal Engine версий 5.0 и выше, в механизме интеграции PVS-Studio и Unreal Engine 5 остаётся неразрешённая проблема, вызванная багом на стороне сборочной системы самого движка. Мы работаем с разработчиками движка для исправления данной проблемы. Доступные на данный момент workaround'ы для решения проблемы также описаны в документации PVS-Studio.
- В C++ анализаторе PVS-Studio улучшено определение целевой платформы для компиляторов семейства QNX Momentics QCC. Неправильное определение платформы в прошлых версиях анализатора могло приводить к ложным срабатываниям.
- В расширении PVS-Studio для системы непрерывного контроля качества кода SonarQube добавлена поддержка загрузки отчёта в кроссплатформенном формате JSON. Это позволяет использовать одинаковый формат отчёта независимо от платформы, на которой используется анализатор.
- В продолжение предыдущего пункта - подробнее про все виды отчётов, поддерживаемых различными утилитами PVS-Studio на разных платформах, а также про возможности преобразования отчётов из одних форматов в другие, можно прочитать в новом разделе документации на нашем сайте.
- В утилите для автоматического оповещения разработчиков blame-notifier добавлена возможность управлять содержимым отправляемых уведомлений: можно прикреплять к письму файлы (включая полный отчёт анализатора), а также задавать тему письма.
- Добавлена возможность проверять Unreal Engine проекты с помощью бесплатной лицензии PVS-Studio. Напомним, что бесплатная лицензия доступна для студентов при добавлении в проверяемый исходный код специальных комментариев. В предыдущих версиях PVS-Studio проверка Unreal Engine проектов ограничивалась только лицензиями Enterprise-уровня.
- V834. Incorrect type of a loop variable. This leads to the variable binding to a temporary object instead of a range element.
- V835. Passing cheap-to-copy argument by reference may lead to decreased performance.
- V1083. Signed integer overflow in arithmetic expression. This leads to undefined behavior.
- V1084. The expression is always true/false. The value is out of range of enum values.
- V1085. Negative value is implicitly converted to unsigned integer type in arithmetic expression.
- V3175. Locking operations must be performed on the same thread. Using 'await' in a critical section may lead to a lock being released on a different thread.
- V3176. The '&'= or '|=' operator is redundant because the right operand is always true/false.
- V5622. OWASP. Possible XPath injection. Potentially tainted data is used in the XPath expression.
- V5623. OWASP. Possible open redirect vulnerability. Potentially tainted data is used in the URL.
PVS-Studio 7.18 (6 апреля 2022)
- PVS-Studio расширил покрытие списка наиболее распространённых угроз защищённости Web-приложений OWASP Top 10 версии 2021 года. На данный момент покрыты 9 из 10 категорий. Мы планируем покрыть оставшуюся категорию, A6 Vulnerable and Outdated Components, в одном из будущих релизов, добавив в C# анализатор PVS-Studio проверку компонентного состава ПО (SCA, Software Composition Analysis).
- В этом релизе С и C++ анализатор PVS-Studio получает обновлённую систему семантического анализа, основанную на улучшенном представлении системы типов данных проверяемого кода. Внедрение нового представления системы типов данных позволило анализатору начать значительно лучше разбирать современный язык C++, сложные конструкции, использующие шаблоны, стандартную библиотеку языка. Благодаря этому очень многие диагностических правила анализатора смогут находить больше потенциально опасных мест, а также будут меньше ошибаться. Тем не менее, учитывая фундаментальный характер данного нововведения, возможно также и появление новых ложно-позитивных срабатываний. Если вы столкнулись с такими ложными срабатываниями после обновления на данную версию анализатора, пожалуйста, напишите о них в нашу поддержку - мы всегда стараемся оперативно исправлять ошибки в работе анализатора.
- В системе отслеживания компиляции для Windows поддержан режим "оборачивания" отслеживаемых процессов с помощью настроек IFEO (Image File Execution Options). Система отслеживания компиляции (compiler monitoring) - это универсальный способ "бесшовной" интеграции с любой сборочной системой, использующей компиляторы, поддерживаемые анализатором PVS-Studio. Новый режим запуска требует небольшой дополнительной конфигурации перед использованием, однако позволяет устранить существенный недостаток системы отслеживания компиляции - пропуск недолгоживущих процессов. Данная проблема особенна актуальна при компиляции C кода для embedded платформ. Новый режим анализа позволяет проверять такой код без пропусков файлов.
- В нашей документации появился раздел, описывающий работу с результатами анализа PVS-Studio в редакторе кода Visual Studio Code. Благодаря возможности преобразовать отчёт PVS-Studio в универсальный формат SARIF, этот отчёт можно теперь просматривать в Visual Studio Code с помощью расширения SARIF Viewer.
- В документации PVS-Studio появился раздел про прямую интеграцию с системой автоматизации сборки CMake с помощью специализированного PVS-Studio модуля. Поддержана работа CMake модуля PVS-Studio на операционных системах Microsoft Windows, а также работа с suppress файлами.
- Ещё один новый раздел документации PVS-Studio - интеграция статического анализа в платформу облачного CI GitHub Actions.
- В C++ анализаторе для Visual Studio поддержана проверка проектов Microsoft GDK (Game Development Kit).
- В утилите для преобразования отчётов plog-converter добавлена поддержка многострочной навигации для нескольких форматов: errorfile, tasklist, SARIF.
- V1079. Parameter of 'std::stop_token' type is not used inside function's body.
- V1080. Call of 'std::is_constant_evaluated' function always returns the same value.
- V1081. Argument of abs() function is minimal negative value. Such absolute value can't be represented in two's complement. This leads to undefined behavior.
- V1082. Function marked as 'noreturn' may return control. This will result in undefined behavior.
- V5619. OWASP. Possible log injection. Potentially tainted data is written into logs.
- V5620. OWASP. Possible LDAP injection. Potentially tainted data is used in a search filter.
- V5621. OWASP. Error message contains potentially sensitive data that may be exposed.
PVS-Studio 7.17 (9 февраля 2022)
- В анализатор PVS-Studio для языков C и C++ добавлена поддержка проверки проектов предназначенных для C6000-CGT - компилятора для встраиваемых систем от Texas Instruments. Полный список поддерживаемых PVS-Studio платформ и компиляторов можно посмотреть здесь.
- Добавлена возможность напрямую работать с файлами подавления предупреждений (подавлять и сбрасывать подавление) в Unreal Engine проектах из IDE расширений PVS-Studio для Microsoft Visual Studio и JetBrains Rider. Подробнее про подавление сообщений в Unreal Engine проектах из командной стоки и с помощью IDE можно почитать в нашей документации (разделы 'Подавление предупреждений в Unreal Engine проектах' и 'Подавление предупреждений анализатора в плагинах PVS-Studio для CLion и Rider.').
- В C# анализатор PVS-Studio добавлены новые аннотации для наиболее часто используемых классов из библиотек ASP.NET Core. Это позволит C# анализатору лучше понимать код, написанный для проектов, использующих ASP.NET.
- В кроссплатформенных инструментах для анализа LLVM Compilation Database и трассировки вызовов и конвертации отчётов (plog-converter и pvs-studio-analyzer) частично изменён алгоритм генерации хэш-сумм, используемых в файлах подавления предупреждений в json формате. Поддерживается работа с файлами подавления старого формата в режиме обратной совместимости. При необходимости пополнения файлов подавления мы рекомендуем перегенерировать файлы подавления в новом формате. Данное изменение направлено на обеспечение, в предстоящих релизах PVS-Studio, полной кроссплатформенности json файлов подавления во всех сценариях работы анализатора.
- V1077. Constructor contains potentially uninitialized members.
- V1078. An empty container is iterated. The loop will not be executed.
- V2017. String literal is identical to variable name. It is possible that the variable should be used instead of the string literal.
- V3174. Suspicious subexpression in a sequence of similar comparisons.
- V5617. OWASP. Assigning potentially negative or large value as timeout of HTTP session can lead to excessive session expiration time.
- V5618. OWASP. Possible server-side request forgery. Potentially tainted data is used in the URL.
PVS-Studio 7.16 (8 декабря 2021)
- В PVS-Studio добавлена поддержка Microsoft Visual Studio 2022. Анализатор можно использовать для работы с Visual C++ и C# проектами для новых версий компиляторов и стандартных C++ и .NET библиотек, которые стали доступны с новой версией данной IDE.
- В C# анализаторе PVS-Studio добавлена поддержка платформы Microsoft .NET 6 для Windows, Linux и macOS, а также новой версии языка: C# 10.0.
- Поддержка стандарта обеспечения безопасности и надёжности MISRA C в PVS-Studio доведена до 80%, полностью покрыта Mandatory, а также большая часть Required категорий. В предстоящих релизах мы планируем уделить больше внимания другим стандартам безопасности, а также диагностикам общего назначения.
- Механизм отключения выдачи предупреждений на существующем коде (baseline разметка, подавление предупреждений) дополнен для работы с Unreal Engine проектами. В данном релизе baseline механизм можно использовать для UE проектов в версии анализатора PVS-Studio для командной строки. В следующей версии PVS-Studio также будет расширена поддержка подавления предупреждений при работе с UE проектами напрямую из сред разработки Microsoft Visual Studio и JetBrains Rider.
- В документации появился новый раздел, в котором описано использование PVS-Studio для проверки проектов, позволяющих сгенерировать описание сборочного процесса в формате JSON Compilation Database. Данный метод подходит для проектов на основе CMake, QBS, Ninja, и т.п.
- В плагинах PVS-Studio для JetBrains IDEA, Rider и CLion добавлена возможность переназначения shortcut'ов для наиболее часто используемых действий по проверке проектов и работе с результатами анализа.
- V833. Using 'std::move' function with const object disables move semantics.
- V1076. Code contains invisible characters that may alter its logic. Consider enabling the display of invisible characters in the code editor.
- V2615. MISRA. A compatible declaration should be visible when an object or function with external linkage is defined.
- V2616. MISRA. All conditional inclusion preprocessor directives should reside in the same file as the conditional inclusion directive to which they are related.
- V2617. MISRA. Object should not be assigned or copied to an overlapping object.
- V2618. MISRA. Identifiers declared in the same scope and name space should be distinct.
- V2619. MISRA. Typedef names should be unique across all name spaces.
- V2620. MISRA. Value of a composite expression should not be cast to a different essential type category or a wider essential type.
- V2621. MISRA. Tag names should be unique across all name spaces.
- V2622. MISRA. External object or function should be declared once in one and only one file.
- V5616. OWASP. Possible command injection. Potentially tainted data is used to create OS command.
PVS-Studio 7.15 (7 октября 2021)
- В Visual Studio плагине PVS-Studio появилась возможность легко посмотреть лучшие срабатывания анализатора среди найденных в проверенном проекте. Мы называем этот новый режим Analyzer Best Warnings. PVS-Studio всегда группировал срабатывания анализатора по 3-м уровням достоверности, и эти уровни традиционно использовались для приоритезации просмотра результатов анализа - все лучшие предупреждения должны попадать на 1-ый уровень. В новой версии анализатора мы разработали более точный алгоритм оценки достоверности предупреждений, использующий, помимо уровней, много дополнительных критериев - как статических (средняя "ценность" диагностики), так и динамических, основанных на срабатываниях анализатора на конкретной кодовой базе (как, например, частота обнаружения). В будущих релизах мы планируем расширять возможности нового режима оценки предупреждений, а также добавить его поддержку в другие IDE плагины и режимы интеграции анализа. Подробнее про работу режима Analyzer Best Warnings можно почитать в нашем блоге и документации.
- На нашем сайте появилось сопоставление диагностик анализатора PVS-Studio со списком наиболее опасных и распространённых потенциальных уязвимостей CWE Top 25. Анализаторы PVS-Studio для языков C, C++, C# и Java покрывают уже более половины категорий в данном списке, и в будущих релизах мы планируем увеличивать процент его покрытия.
- Улучшено качество анализа проектов для Unreal Engine - в C++ анализаторе PVS-Studio были дополнительно проаннотированы несколько сотен стандартных функций из этого игрового движка.
- С этим релизом мы увеличили покрытие списка наиболее распространённых и опасных угроз защищённости приложений OWASP Top 10 2017 до 9-ти из 10-ти категорий. Таким образом, в данном списке осталась лишь одна не поддерживаемая в PVS-Studio категория - использование компонентов с известными уязвимостями. Данная категория относится к классу инструментов, известных, как SCA (Software Composition Analysis). В будущих релизах, для полного закрытия OWASP Top 10, мы планируем реализовать SCA в PVS-Studio C# анализаторе.
- Поддержка стандарта обеспечения безопасности и надёжности MISRA C в PVS-Studio достигла 70%. До конца этого года мы планируем увеличить поддержку MISRA C не менее, чем до 80%.
- В Visual Studio плагине добавлена возможность задавать shortcut'ы для операций подавления ложных срабатываний и разметки предупреждений.
- В утилитах для конвертации отчётов поддержана генерация отчёта соответствия на основе стандарта MISRA Compliance. Подробнее про этот формат и генерацию отчёта о соответствии MISRA можно почитать в нашем блоге.
- Очередная оптимизация производительности C# анализатора PVS-Studio позволит ускорить проверку крупных проектов за счёт значительного уменьшения времени подготовки (разбора) проекта перед анализом. Подробнее почитать про это можно в нашем блоге.
- В C++ анализаторе PVS-Studio был стандартизован формат выдачи диапазона значений переменных для больших чисел. Изменение текста некоторых сообщений может привести к тому, что они вновь появятся в отчёте, хотя ранее были подавлены с помощью baselining механизма. Если вы столкнулись с этим - пожалуйста, подавите эти предупреждения заново.
- V1075. The function expects the file to be opened in one mode, but it was opened in different mode.
- V2604. MISRA. Features from <stdarg.h> should not be used.
- V2605. MISRA. Features from <tgmath.h> should not be used.
- V2606. MISRA. There should be no attempt to write to a stream that has been opened for reading.
- V2607. MISRA. Inline functions should be declared with the static storage class.
- V2608. MISRA. The 'static' storage class specifier should be used in all declarations of object and functions that have internal linkage.
- V2609. MISRA. There should be no occurrence of undefined or critical unspecified behaviour.
- V2610. MISRA. The ', " or \ characters and the /* or // character sequences should not occur in a header file name.
- V2611. MISRA. Casts between a pointer to an incomplete type and any other type shouldn't be performed.
- V2612. MISRA. Array element should not be initialized more than once.
- V2613. MISRA. Operand that is a composite expression has more narrow essential type than the other operand.
- V2614. MISRA. External identifiers should be distinct.
- V3173. Possible incorrect initialization of variable. Consider verifying the initializer.
- V3555. AUTOSAR. The 'static' storage class specifier should be used in all declarations of functions that have internal linkage.
- V5612. OWASP. Do not use old versions of SSL/TLS protocols as it may cause security issues.
- V5613. OWASP. Use of outdated cryptographic algorithm is not recommended.
- V5614. OWASP. Potential XXE vulnerability. Insecure XML parser is used to process potentially tainted data.
- V5615. OWASP. Potential XEE vulnerability. Insecure XML parser is used to process potentially tainted data.
PVS-Studio 7.14 (9 августа 2021)
- PVS-Studio теперь можно удобно использовать в среде разработки JetBrains CLion с помощью плагина для данной IDE. Подробнее о том, с чем мы столкнулись при разработке CLion плагина, можно почитать в нашем блоге. А здесь можно посмотреть на все IDE от JetBrains, работу с которыми уже поддерживает PVS-Studio.
- В С++ анализатор PVS-Studio добавлена поддержка межмодульного анализа. В этом режиме анализатор при разборе кода учитывает результаты вызовов методов, объявленных в других единицах трансляции. Межмодульный анализ также есть в C# (на уровне проектов) и Java (на уровне пакетов) анализаторах PVS-Studio. В С++ анализаторе данный режим не активирован по умолчанию, т.к. он может замедлять скорость анализа. В нашем блоге можно почитать подробнее об особенностях его реализации и работы.
- Теперь PVS-Studio обеспечивает покрытие 6-ти из 10-ти категорий в OWASP Top 10 - списке наиболее распространённых и опасных угроз защищённости Web-приложений. В этом релизе мы добавили в анализатор диагностики для категорий A5 Broken Access Control, A7 Cross-Site Scripting (XSS) и A8 Insecure Deserialization. В будущих релизах в этом году мы планируем увеличить покрытие до 9-ти категорий.
- Поддержка стандарта обеспечения безопасности и надёжности MISRA C в PVS-Studio составляет теперь 60%. В предстоящих релизах в этом году мы планируем увеличить поддержку этого стандарта как минимум до 80%, а также реализовать поддержку стандарта проверки соответствия кода MISRA C Compliance.
- В плагин PVS-Studio для SonarQube добавлена поддержка версии SonarQube 8.9 LTS.
- Скорость анализа в C# анализаторе PVS-Studio была увеличена до 2-х раз при анализе крупных (более 10 000 исходных файлов) проектов. Также C# анализатор теперь значительно эффективнее использует многоядерные процессоры. В нашем блоге мы поделились методиками, которые использовали для ускорения работы C# анализатора, и которые могут подойти и для других классов .NET приложений.
- В C++ анализаторе PVS-Studio теперь можно отключать диагностические правила для заданного диапазона строк в исходном файле.
- 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 7.13 (31 мая 2021)
- C# анализатор PVS-Studio теперь поддерживает проверку проектов для платформы .NET 5. Подробнее про это можно прочитать в нашем блоге.
- В C# анализаторе PVS-Studio появилась первое диагностическое правило из стандарта OWASP ASVS, ищущее в коде ошибки, связанные с непроверенными данными (tainted data): поиск потенциальных SQL инъекций (диагностическое правило V5608). Данный класс ошибок занимает важное место в рейтинге OWASP Top 10, и в будущих релизах PVS-Studio мы будем добавлять диагностические правила для поиска множества других видов потенциальных tainted data уязвимостей.
- Утилита Blame Notifier для автоматической рассылки отчётов о найденных анализатором предупреждениях на основе blame информации из системы контроля версий теперь может сортировать предупреждения по номерам и датам коммитов. Это позволяет видеть предупреждения на код, появившиеся только за определённый день. Подробнее про новый режим работы можно почитать в нашем блоге.
- Продолжая тему автоматической публикации отчётов, теперь можно это делать не только с помощью Blame Notifier. Наш пользователь написал легковесный аналог (не требующий .NET для работы) данной утилиты, который вы можете попробовать на GitHub.
- В C++ анализаторе улучшена поддержка проверки Ninja проектов на Windows с использованием JSON Compilation Database (compile_commands.json).
- Использование компилятора Clang для сборки C++ анализатора PVS-Studio позволило ускорить до 10% его работу при проверке исходных файлов на операционных системах Windows.
- Плагин PVS-Studio для JetBrains Rider теперь поддерживает работу с версией Rider 2021.1.
- В утилиту для проверки C++ и C# Visual Studio проектов PVS-Studio_Cmd.exe добавлена возможность передавать файл подавленных сообщений напрямую через командную строку. До этого подавленные сообщения можно было добавлять только на уровне проектов и solution'а.
- V832. It's better to use '= default;' syntax instead of empty body.
- V1070. Signed value is converted to an unsigned one with subsequent expansion to a larger type in ternary operator.
- V1071. Consider inspecting the 'foo' function. The return value is not always used.
- V1072. The buffer is securely cleared not on all execution paths.
- V1073. Consider checking for misprints. Check the following code block after the 'if' statement.
- V1074. Boundary between numeric escape sequence and string is unclear. The escape sequence ends with a letter and the next character is also a letter. Check for typos.
- V2577. MISRA. The function argument corresponding to a parameter declared to have an array type should have an appropriate number of elements.
- V2578. MISRA. An identifier with array type passed as a function argument should not decay to a pointer.
- V2579. MISRA. Macro should not be defined with the same name as a keyword.
- V2580. MISRA. The 'restrict' specifier should not be used.
- V2581. MISRA. Single-line comments should not end with a continuation token.
- V2582. MISRA. Block of memory should only be freed if it was allocated by a Standard Library function.
- V2583. MISRA. Line whose first token is '#' should be a valid preprocessing directive.
- V3170. Both operands of the '??' operator are identical.
- V3171. Potentially negative value is used as the size of an array.
- V3551. AUTOSAR. An identifier with array type passed as a function argument should not decay to a pointer.
- V5013. OWASP. Storing credentials inside source code can lead to security issues.
- V5608. OWASP. Possible SQL injection. Potentially tainted data is used to create SQL command.
PVS-Studio 7.12 (11 марта 2021)
- Добавлено сопоставление диагностических правил PVS-Studio с рейтингом наиболее опасных угроз защищённости Web-приложений OWASP Top 10. Данный рейтинг основан на общем мнении экспертов по вопросам безопасности со всего мира и помогает разработчикам и экспертам по безопасности обнаруживать и своевременно устранять риски в разрабатываемых ими приложениях.
- Расширены возможности для работы со стандартами обеспечения безопасности (MISRA C, MISRA C++, AUTOSAR C++ 14 Coding Guidelines) и защищённости (SEI CERT, OWASP ASVS). Теперь сопоставление диагностических правил анализатора с этими стандартами доступно не только в виде таблиц на наших web ресурсах, но также выдаётся во всех видах отчётов анализатора (XML, Json, HTML и т.д.), поддержано в IDE интеграциях PVS-Studio (Visual Studio, IntelliJ IDEA, Jetbrains Rider), плагине для SonarQube (тэги и раздел Security Category). Подробнее про новые возможности PVS-Studio для работы с данными стандартами можно почитать в нашем блоге.
- Реализована поддержка ARM компилятора IAR и компилятора QNX для Linux версии C++ анализатора PVS-Studio
- В утилиту для отслеживания вызовов C++ компилятора CLMonitor.exe добавлен режим проверки списка файлов с учётом зависимостей компиляции между исходными и заголовочными файлами. Данный режим можно использовать для автоматизации проверки merge и pull request'ов.
- Добавлена возможность отключать отдельные диагностики и группы диагностик в .pvsconfig файлах и управляющих комментариях (только для C++ анализатора) в зависимости от уровней достоверности срабатываний. Подробнее об этом режиме можно прочитать в нашей документации (подраздел 'Полное отключение предупреждений').
- Добавлена поддержка проверки проектов, использующих компилятор MPLAB XC8.
- V1068. Do not define an unnamed namespace in a header file.
- V1069. Do not concatenate string literals with different prefixes.
- V2575. MISRA. The global namespace should only contain 'main', namespace declarations and 'extern "C"' declarations.
- V2576. The identifier 'main' should not be used for a function other than the global function 'main'.
- V3167. Parameter of 'CancellationToken' type is not used inside function's body.
- V3168. Awaiting on expression with potential null value can lead to throwing of 'NullReferenceException'.
- V3169. Suspicious return of a local reference variable which always equals null.
- V3501. AUTOSAR. Octal constants should not be used.
- V3502. AUTOSAR. Size of an array is not specified.
- V3503. AUTOSAR. The 'goto' statement shouldn't jump to a label declared earlier.
- V3504. AUTOSAR. The body of a loop\conditional statement should be enclosed in braces.
- V3505. AUTOSAR. The function with the 'atof/atoi/atoll/atoll' name should not be used.
- V3506. AUTOSAR. The function with the 'abort/exit/getenv/system' name should not be used.
- V3507. AUTOSAR. The macro with the 'setjmp' name and the function with the 'longjmp' name should not be used.
- V3508. AUTOSAR. Unbounded functions performing string operations should not be used.
- V3509. AUTOSAR. Unions should not be used.
- V3510. AUTOSAR. Declaration should contain no more than two levels of pointer nesting.
- V3511. AUTOSAR. The 'if' ... 'else if' construct should be terminated with an 'else' statement.
- V3512. AUTOSAR. Literal suffixes should not contain lowercase characters.
- V3513. AUTOSAR. Every switch-clause should be terminated by an unconditional 'break' or 'throw' statement.
- V3514. AUTOSAR. The 'switch' statement should have 'default' as the last label.
- V3515. AUTOSAR. All integer constants of unsigned type should have 'u' or 'U' suffix.
- V3516. AUTOSAR. A switch-label should only appear at the top level of the compound statement forming the body of a 'switch' statement.
- V3517. AUTOSAR. The functions from time.h/ctime should not be used.
- V3518. AUTOSAR. A switch-expression should not have Boolean type. Consider using of 'if-else' construct.
- V3519. AUTOSAR. The comma operator should not be used.
- V3520. AUTOSAR. Any label should be declared in the same block as 'goto' statement or in any block enclosing it.
- V3521. AUTOSAR. The loop counter should not have floating-point type.
- V3522. AUTOSAR. Unreachable code should not be present in the project.
- V3523. AUTOSAR. Functions should not have unused parameters.
- V3524. AUTOSAR. The value of uninitialized variable should not be used.
- V3525. AUTOSAR. Function with a non-void return type should return a value from all exit paths.
- V3526. AUTOSAR. Expression resulting from the macro expansion should be surrounded by parentheses.
- V3527. AUTOSAR. The return value of non-void function should be used.
- V3528. AUTOSAR. The address of an object with local scope should not be passed out of its scope.
- V3529. AUTOSAR. Floating-point values should not be tested for equality or inequality.
- V3530. AUTOSAR. Variable should be declared in a scope that minimizes its visibility.
- V3531. AUTOSAR. Expressions with enum underlying type should have values corresponding to the enumerators of the enumeration.
- V3532. AUTOSAR. Unary minus operator should not be applied to an expression of the unsigned type.
- V3533. AUTOSAR. Expression containing increment (++) or decrement (--) should not have other side effects.
- V3534. AUTOSAR. Incorrect shifting expression.
- V3535. AUTOSAR. Operand of sizeof() operator should not have other side effects.
- V3536. AUTOSAR. A pointer/reference parameter in a function should be declared as pointer/reference to const if the corresponding object was not modified.
- V3537. AUTOSAR. Subtraction, >, >=, <, <= should be applied only to pointers that address elements of the same array.
- V3538. AUTOSAR. The result of an assignment expression should not be used.
- V3539. AUTOSAR. Array indexing should be the only form of pointer arithmetic and it should be applied only to objects defined as an array type.
- V3540. AUTOSAR. There should be no implicit integral-floating conversion.
- V3541. AUTOSAR. A function should not call itself either directly or indirectly.
- V3542. AUTOSAR. Constant expression evaluation should not result in an unsigned integer wrap-around.
- V3543. AUTOSAR. Cast should not remove 'const' / 'volatile' qualification from the type that is pointed to by a pointer or a reference.
- V3544. AUTOSAR. The 'operator &&', 'operator ||', 'operator ,' and the unary 'operator &' should not be overloaded.
- V3545. AUTOSAR. Operands of the logical '&&' or the '||' operators, the '!' operator should have 'bool' type.
- V3546. AUTOSAR. Conversions between pointers to objects and integer types should not be performed.
- V3547. AUTOSAR. Identifiers that start with '__' or '_[A-Z]' are reserved.
- V3548. AUTOSAR. Functions should not be declared at block scope.
- V3549. AUTOSAR. The global namespace should only contain 'main', namespace declarations and 'extern "C"' declarations.
- V3550. AUTOSAR. The identifier 'main' should not be used for a function other than the global function 'main'.
- V5001. OWASP. It is highly probable that the semicolon ';' is missing after 'return' keyword.
- V5002. OWASP. An empty exception handler. Silent suppression of exceptions can hide the presence of bugs in source code during testing.
- V5003. OWASP. The object was created but it is not being used. The 'throw' keyword could be missing.
- V5004. OWASP. Consider inspecting the expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type.
- V5005. OWASP. A value is being subtracted from the unsigned variable. This can result in an overflow. In such a case, the comparison operation can potentially behave unexpectedly.
- V5006. OWASP. More than N bits are required to store the value, but the expression evaluates to the T type which can only hold K bits.
- V5007. OWASP. Consider inspecting the loop expression. It is possible that the 'i' variable should be incremented instead of the 'n' variable.
- V5008. OWASP. Classes should always be derived from std::exception (and alike) as 'public'.
- V5009. OWASP. Unchecked tainted data is used in expression.
- V5010. OWASP. The variable is incremented in the loop. Undefined behavior will occur in case of signed integer overflow.
- V5011. OWASP. Possible overflow. Consider casting operands, not the result.
- V5012. OWASP. Potentially unsafe double-checked locking.
- V5301. OWASP. An exception handling block does not contain any code.
- V5302. OWASP. Exception classes should be publicly accessible.
- V5303. OWASP. The object was created but it is not being used. The 'throw' keyword could be missing.
- V5304. OWASP. Unsafe double-checked locking.
- V5305. OWASP. Storing credentials inside source code can lead to security issues.
- V5601. OWASP. Storing credentials inside source code can lead to security issues.
- V5602. OWASP. The object was created but it is not being used. The 'throw' keyword could be missing.
- V5603. OWASP. The original exception object was swallowed. Stack of original exception could be lost.
- V5604. OWASP. Potentially unsafe double-checked locking. Use volatile variable(s) or synchronization primitives to avoid this.
- V5605. OWASP. Unsafe invocation of event, NullReferenceException is possible. Consider assigning event to a local variable before invoking it.
- V5606. OWASP. An exception handling block does not contain any code.
- V5607. OWASP. Exception classes should be publicly accessible.
- V6102. Inconsistent synchronization of a field. Consider synchronizing the field on all usages.
- V6103. Ignored InterruptedException could lead to delayed thread shutdown.
- V6104. A pattern was detected: A || (A && ...). The expression is excessive or contains a logical error.
- V6105. Consider inspecting the loop expression. It is possible that different variables are used inside initializer and iterator.
- V6106. Casting expression to 'X' type before implicitly casting it to other type may be excessive or incorrect.
PVS-Studio 7.11 (17 декабря 2020)
- Изменился порядок активации утилиты pvs-studio-analyzer для бесплатной версии PVS-Studio, требующей добавления комментариев в начало каждого исходного файла. Теперь перед первым запуском анализа необходимо ввести специальный лицензионный ключ командой pvs-studio-analyzer credentials PVS-Studio Free FREE-FREE-FREE-FREE.
- Для более надёжной работы механизма массового подавления предупреждений был изменён расчёт хэша сообщения для случаев, когда строка кода, на которое было выдано сообщение, содержит нелатинские символы. Это возможно, например, когда строка кода содержит комментарий. Если подобные сообщения были ранее подавлены в suppress файлах, эти сообщения могут снова появиться в отчёте анализатора - такие сообщения потребуется подавить заново.
- В утилите pvs-studio-analyzer добавлена поддержка компиляторов IAR Arm.
- В утилите pvs-studio-analyzer добавлен перехват вызовов компиляторов через ld-linux.
- V2574. MISRA. Functions shall not be declared at block scope.
- V3165. The expression of the 'char' type is passed as an argument of the 'A' type whereas similar overload with the string parameter exists.
- V3166. Calling the 'SingleOrDefault' method may lead to 'InvalidOperationException'.
- V6100. An object is used as an argument to its own method. Consider checking the first actual argument of the 'Foo' method.
- V6101. compareTo()-like methods can return not only the values -1, 0 and 1, but any values.
PVS-Studio 7.10 (5 ноября 2020)
- Возможности PVS-Studio как SAST (Static Application Security Testing) инструмента были расширены началом работы над поддержкой стандартов OWASP ASVS и AUTOSAR C++14 Coding Guidelines. Стали доступны таблицы соответствия существующих диагностик анализатора этим стандартам. В будущих релизах анализатора мы будем расширять покрытие стандартов MISRA и AUTOSAR, а также реализовывать новые диагностические правила на основе списка наиболее распространённых и критичных уязвимостей OWASP Top 10.
- В плагин PVS-Studio для JetBrains Rider добавлена поддержка работы с результатами анализа при проверке проектов для Unreal Engine (JetBrains Rider для Unreal Engine доступен сейчас по программе раннего доступа).
- SonarQube плагин PVS-Studio теперь умеет ассоциировать сообщения анализатора, имеющие CWE (Common Weakness Enumeration) идентификатор, с сообщениями о дефектах защищённости на вкладке Security Category.
- Утилиты для преобразования результатов анализа PVS-Studio (PlogConverter.exe для Windows и plog-converter для Linux\macOS) теперь поддерживают конвертацию в формат SARIF (Static Analysis Results Interchange Format). SARIF - это универсальный открытый формат для представления результатов работы инструментов, осуществляющих поиск ошибок, дефектов безопасности и защищённости. Этот формат поддерживается многими статическими анализаторами, и позволяет совместно использовать различные инструменты контроля качества кода в единых экосистемах.
- V830. Decreased performance. Consider replacing the use of 'std::optional::value()' with either the '*' or '->' operator.
- V831. Decreased performance. Consider replacing the call to the 'at()' method with the 'operator[]'.
- V1064. The left operand of integer division is less than the right one. The result will always be zero.
- V1065. Expression can be simplified: check similar operands.
- V1066. The 'SysFreeString' function should be called only for objects of the 'BSTR' type.
- V1067. Throwing from exception constructor may lead to unexpected behavior.
- V3156. The argument of the method is not expected to be null.
- V3157. Suspicious division. Absolute value of the left operand is less than the right operand.
- V3158. Suspicious division. Absolute values of both operands are equal.
- V3159. Modified value of the operand is not used after the increment/decrement operation.
- V3160. Argument of incorrect type is passed to the 'Enum.HasFlag' method.
- V3161. Comparing value type variables with 'ReferenceEquals' is incorrect because compared values will be boxed.
- V3162. Suspicious return of an always empty collection.
- V3163. An exception handling block does not contain any code.
- V3164. Exception classes should be publicly accessible.
- V6093. Automatic unboxing of a variable may cause NullPointerException.
- 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.
- V6095. Thread.sleep() inside synchronized block/method may cause decreased performance.
- V6096. An odd precise comparison. Consider using a comparison with defined precision: Math.abs(A - B) < Epsilon or Math.abs(A - B) > Epsilon.
- V6097. Lowercase 'L' at the end of a long literal can be mistaken for '1'.
- V6098. A method does not override another method from the base class.
- V6099. The initial value of the index in the nested loop equals 'i'. Consider using 'i + 1' instead.
PVS-Studio 7.09 (27 августа 2020)
- PVS-Studio включён в отчёт "Now Tech: Static Application Security Testing, Q3 2020" как SAST-специализированный инструмент. Использование методологии статического тестирования защищённости приложений (Static Application Security Testing, SAST) позволяет улучшить безопасность тестируемого приложения и смягчить влияние дефектов безопасности на его жизненный цикл. Forrester Research является одним из ведущих исследователей влияния развития инновационных технологий на бизнес. Отчёт об исследовании доступен для покупки подписчикам и клиентам Forrester Research.
- В C# анализаторе PVS-Studio, для Visual Studio и Rider плагинов расширены возможности навигации по исходным файлам - для межпроцедурных срабатываний добавлена возможность перехода на потенциально опасные участки кода внутри методов, когда анализатор ругается на вызов такого метода.
- Для C# анализатора PVS-Studio добавлена поддержка переопределения уровней значимости предупреждений в файлах настройки диагностик (.pvsconfig).
- V012. Some warnings could have been disabled. Для C++ анализатора PVS-Studio добавлена возможность отображать в отчёте правила исключений из файлов настройки диагностик (.pvsconfig).
- V826. Consider replacing standard container with a different one.
- V827. Maximum size of a vector is known at compile time. Consider pre-allocating it by calling reserve(N).
- V828. Decreased performance. Moving an object in a return statement prevents copy elision.
- V829. Lifetime of the heap-allocated variable is limited to the current function's scope. Consider allocating it on the stack instead.
- V1059. Macro name overrides a keyword/reserved name. This may lead to undefined behavior.
- V1060. Passing 'BSTR ' to the 'SysAllocString' function may lead to incorrect object creation.
- V1061. Extending 'std' or 'posix' namespace may result in undefined behavior.
- V1062. Class defines a custom new or delete operator. The opposite operator must also be defined.
- V1063. The modulo by 1 operation is meaningless. The result will always be zero.
- V3154. The 'a % b' expression always evaluates to 0.
- V3155. The expression is incorrect or it can be simplified.
- V6082. Unsafe double-checked locking.
- V6083. Serialization order of fields should be preserved during deserialization.
- V6084. Suspicious return of an always empty collection.
- V6085. An abnormality within similar comparisons. It is possible that a typo is present inside the expression.
- V6086. Suspicious code formatting. 'else' keyword is probably missing.
- V6087. InvalidClassException may occur during deserialization.
- V6088. Result of this expression will be implicitly cast to 'Type'. Check if program logic handles it correctly.
- V6089. It's possible that the line was commented out improperly, thus altering the program's operation logics.
- V6090. Field 'A' is being used before it was initialized.
- V6091. Suspicious getter/setter implementation. The 'A' field should probably be returned/assigned instead.
- V6092. A resource is returned from try-with-resources statement. It will be closed before the method exits.
PVS-Studio 7.08 (18 июня 2020)
- Анализатор PVS-Studio C# для .NET Framework и .NET Core проектов теперь доступен на операционных системах Linux и macOS.
- Анализатор PVS-Studio C# теперь можно использовать вместе со средой разработки JetBrains Rider.
- Анализатор PVS-Studio теперь можно легко попробовать на примерах C и C++ кода, без необходимости скачивать и устанавливать дистрибутив анализатора, с помощью интеграции с сервисом Compiler Explorer. Обратите внимание - сервис Compiler Explorer позволяет попробовать анализатор на небольшом, изолированном фрагменте кода или синтетическом примере. Для того, чтобы полноценно оценить возможности анализатора, скачайте и установите полную версию PVS-Studio.
- Новый режим проверки списка файлов в утилите командной строки PVS-Studio_Cmd.exe на Windows теперь работает для C, C+ и C# файлов и умеет учитывать зависимости компиляции (исходных файлов от заголовочных файлов), что позволяет настраивать проверку pull и merge request'ов с помощью анализатора PVS-Studio.
- Улучшена работа PVS-Studio C# при проверке Unity проектов - добавлены дополнительные аннотации для самых распространённых типов из библиотек Unity.
- В утилиту для преобразования отчётов plog-converter (Linux, macOS) добавлена поддержка формата вывода для TeamCity.
- В утилиту для автоматического оповещения разработчиков Blame Notifier добавлена поддержка системы контроля версий Perforce.
- V824. It is recommended to use the 'make_unique/make_shared' function to create smart pointers.
- V825. Expression is equivalent to moving one unique pointer to another. Consider using 'std::move' instead.
- V1056. The predefined identifier '__func__' always contains the string 'operator()' inside function body of the overloaded 'operator()'.
- V1057. Pseudo random sequence is the same at every program run. Consider assigning the seed to a value not known at compile-time.
- V1058. Nonsensical comparison of two different functions' addresses.
- V6078. Potential Java SE API compatibility issue.
- V6079. Value of variable is checked after use. Potential logical error is present. Check lines: N1, N2.
- V6080. Consider checking for misprints. It's possible that an assigned variable should be checked in the next condition.
- V6081. Annotation that does not have 'RUNTIME' retention policy will not be accessible through Reflection API.
PVS-Studio 7.07 (16 апреля 2020)
- В С++ анализаторе PVS-Studio добавлен синтаксический разбор концептов. Концепты - интерфейсное расширение шаблонов языка C++, введенное стандартом C++20. Исправлена ошибка V003, возникавшая при использовании концептов в проверяемом коде.
- SonarQube плагин PVS-Studio теперь поддерживает работу в macOS.
- В утилите для преобразования XML отчётов анализатора (PlogConverter) добавлена поддержка формата для Continuous Integration сервера TeamCity.
- В command line анализаторе Visual Studio \ MSBuild проектов (PVS-Studio_Cmd.exe) добавлена возможность указывать и исключать из анализа отдельные проекты из командной строки, через флаги --selectProjects / --excludeProjects.
- Исправлено зависание Visual Studio плагина PVS-Studio, вызванное повторной инициализацией плагина при открытии solution файла в IDE.
- V1053. Calling the 'foo' virtual function in the constructor/destructor may lead to unexpected result at runtime.
- V1054. Object slicing. Derived class object was copied to the base class object.
- V1055. The 'sizeof' expression returns the size of the container type, not the number of elements. Consider using the 'size()' function.
- V2573. MISRA. Identifiers that start with '__' or '_[A-Z]' are reserved.
PVS-Studio 7.06 (27 февраля 2020)
- PVS-Studio теперь можно использовать совместно с кросс-платформенной IDE для embedded разработки PlatformIO. Подробнее про настройку PVS-Studio в PlatformIO можно почитать здесь.
- Оптимизировано выделение памяти C# анализатором PVS-Studio, что может давать ускорение анализа при проверке крупных проектов.
- В C# анализаторе PVS-Studio добавлены опции --excludeDefines / --appendDefines, позволяющие исключать/добавлять символы препроцессора, которые будут использоваться при анализе.
- C# анализатор PVS-Studio теперь понимает Unity-специфичные проверки переменных на null через их неявное преобразование к типу bool.
- V823. Decreased performance. Object may be created in-place in a container. Consider replacing methods: 'insert' -> 'emplace', 'push_*' -> 'emplace_*'.
- V1050. The uninitialized class member is used when initializing the base class.
- V1051. Consider checking for misprints. It's possible that an assigned variable should be checked in the next condition.
- V1052. Declaring virtual methods in a class marked as 'final' is pointless.
- V2562. MISRA. Expressions with pointer type should not be used in the '+', '-', '+=' and '-=' operations.
- V2563. MISRA. Array indexing should be the only form of pointer arithmetic and it should be applied only to objects defined as an array type.
- V2564. MISRA. There should be no implicit integral-floating conversion.
- V2565. MISRA. A function should not call itself either directly or indirectly.
- V2566. MISRA. Constant expression evaluation should not result in an unsigned integer wrap-around.
- V2567. MISRA. Cast should not remove 'const' / 'volatile' qualification from the type that is pointed to by a pointer or a reference.
- V2568. MISRA. Both operands of an operator should be of the same type category.
- V2569. MISRA. The 'operator &&', 'operator ||', 'operator ,' and the unary 'operator &' should not be overloaded.
- V2570. MISRA. Operands of the logical '&&' or the '||' operators, the '!' operator should have 'bool' type.
- V2571. MISRA. Conversions between pointers to objects and integer types should not be performed.
- V2572. MISRA. Value of the expression should not be converted to the different essential type or the narrower essential type.
- V3150. Loop break conditions do not depend on the number of iterations.
- V3151. Potential division by zero. Variable was used as a divisor before it was compared to zero. Check lines: N1, N2.
- V3152. Potential division by zero. Variable was compared to zero before it was used as a divisor. Check lines: N1, N2.
- V3153. Dereferencing the result of null-conditional access operator can lead to NullReferenceException. Consider removing parentheses around null-conditional access expression.
- V6077. Label is present inside a switch(). It is possible that these are misprints and 'default:' operator should be used instead.
PVS-Studio 7.05 (10 декабря 2019)
- Утилита для оповещения разработчиков о результатах анализа Blame Notifier теперь доступна на всех поддерживаемых анализатором платформах (Windows, Linux, macOS). Blame Notifier использует информацию из системы контроля версий (SVN, Git, Mercurial) для определения человека, написавшего код, на который анализатор выдаёт сообщение.
- PVS-Studio теперь можно установить с помощью менеджера пакетов Chocolatey.
- Добавлена поддержка проверки проектов .NET Core 3 и 3.1 для C# анализатора.
- В Windows версии анализатора появилась возможность задавать исключённые из анализа директории на уровне конкретного Visual Studio проекта или solution'а с помощью .pvsconfig файлов.
- Оптимизирован расход памяти C# анализатором PVS-Studio при проверке крупных проектов.
- V822. Decreased performance. A new object is created, while a reference to an object is expected.
- V1044. Loop break conditions do not depend on the number of iterations.
- V1045. The DllMain function throws an exception. Consider wrapping the throw operator in a try..catch block.
- V1046. Unsafe usage of the 'bool' and integer types together in the operation '&='.
- V1047. Lifetime of the lambda is greater than lifetime of the local variable captured by reference.
- V1048. Variable 'foo' was assigned the same value.
- V1049. The 'foo' include guard is already defined in the 'bar1.h' header. The 'bar2.h' header will be excluded from compilation.
- V2558. MISRA. A pointer/reference parameter in a function should be declared as pointer/reference to const if the corresponding object was not modified.
- V2559. MISRA. Subtraction, >, >=, <, <= should be applied only to pointers that address elements of the same array.
- V2560. MISRA. There should be no user-defined variadic functions.
- V2561. MISRA. The result of an assignment expression should not be used.
- V3146. Possible null dereference. A method can return default null value.
- V3147. Non-atomic modification of volatile variable.
- V3148. Casting potential 'null' value to a value type can lead to NullReferenceException.
- V3149. Dereferencing the result of 'as' operator can lead to NullReferenceException.
- V6072. Two similar code fragments were found. Perhaps, this is a typo and 'X' variable should be used instead of 'Y'.
- V6073. It is not recommended to return null or throw exceptions from 'toString' / 'clone' methods.
- V6074. Non-atomic modification of volatile variable.
- V6075. The signature of method 'X' does not conform to serialization requirements.
- V6076. Recurrent serialization will use cached object state from first serialization.
PVS-Studio 7.04 (4 сентября 2019)
- Добавлена поддержка IntelliJ IDEA версии 192 в PVS-Studio плагине для этой IDE.
- В PVS-Studio плагины для Visual Studio добавлена возможность автоматической загрузки логов анализа при проверке Unreal Engine проектов.
- Добавлена возможность проверки C# проектов под .NET Core 3 Preview.
- В C# анализаторе добавлено вычисление возвращаемых значений async методов, а также get и set методов у свойств.
- В утилите для отслеживания запусков компиляторов на Windows добавлена возможность отслеживать только дочерние процессы у заданного процесса.
- В утилите для отслеживания запусков компиляторов на Linux добавлен режим работы с игнорированием ccache кэша.
- Плагин для отображения результатов анализа PVS-Studio в Jenkins теперь можно также использовать на Linux\macOS хостах (раньше он был доступен только для Windows)
- Добавлена поддержка SonarQube 7.9 LTS в плагине PVS-Studio для SonarQube.
- V1040. Possible typo in the spelling of a pre-defined macro name.
- V1041. Class member is initialized with dangling reference.
- V1042. This file is marked with copyleft license, which requires you to open the derived source code.
- V1043. A global object variable is declared in the header. Multiple copies of it will be created in all translation units that include this header file.
- V2551. MISRA. Variable should be declared in a scope that minimizes its visibility.
- V2552. MISRA. Expressions with enum underlying type should have values corresponding to the enumerators of the enumeration.
- V2553. MISRA. Unary minus operator should not be applied to an expression of the unsigned type.
- V2554. MISRA. Expression containing increment (++) or decrement (--) should not have other side effects.
- V2555. MISRA. Incorrect shifting expression.
- V2556. MISRA. Use of a pointer to FILE when the associated stream has already been closed.
- V2557. MISRA. Operand of sizeof() operator should not have other side effects.
- V3140. Property accessors use different backing fields.
- V3141. Expression under 'throw' is a potential null, which can lead to NullReferenceException.
- V3142. Unreachable code detected. It is possible that an error is present.
- V3143. The 'value' parameter is rewritten inside a property setter, and is not used after that.
- V3144. This file is marked with copyleft license, which requires you to open the derived source code.
- V3145. Unsafe dereference of a WeakReference target. The object could have been garbage collected before the 'Target' property was accessed.
- V6068. Suspicious use of BigDecimal class.
- V6069. Unsigned right shift assignment of negative 'byte' / 'short' value.
- V6070. Unsafe synchronization on an object.
- V6071. This file is marked with copyleft license, which requires you to open the derived source code.
PVS-Studio 7.03 (25 июня 2019)
- В документации анализатора PVS-Studio теперь доступен раздел по использованию анализатора в контейнерах с помощью Docker.
- Добавлена поддержка проверки проектов для QNX Momentics, компилятора QCC.
- V1038. It's odd that a char or string literal is added to a pointer.
- V1039. Character escape is used in multicharacter literal. This causes implementation-defined behavior.
- V2543. MISRA. Value of the essential character type should be used appropriately in the addition/subtraction operations.
- V2544. MISRA. Values of the essential appropriate types should be used at expressions.
- V2545. MISRA. Conversion between pointers of different object types should not be performed.
- V2546. MISRA. Expression resulting from the macro expansion should be surrounded by parentheses.
- V2547. MISRA. The return value of non-void function should be used.
- V2548. MISRA. The address of an object with local scope should not be passed out of its scope.
- V2549. MISRA. Pointer to FILE should not be dereferenced.
- V2550. MISRA. Floating-point values should not be tested for equality or inequality.
- V3138. String literal contains potential interpolated expression.
- V3139. Two or more case-branches perform the same actions.
- V6067. Two or more case-branches perform the same actions.
PVS-Studio 7.02 (25 апреля 2019)
- В PVS-Studio появилась поддержка Visual Studio 2019. Visual C++, .NET Framework и .NET Core C# проекты Visual Studio 2019 можно проверять как из самой IDE, так и из командной строки с помощью утилиты PVS-Studio_Cmd.exe.
- Добавлена поддержка нового синтаксиса из C# 8.0 в PVS-Studio C# анализатор.
- PVS-Studio C# теперь может видеть потенциальные разыменования нулевых ссылок (диагностика V3080) внутри тел методов, когда значение потенциального null'а передаётся в качестве аргумента метода.
- Плагин PVS-Studio Java анализатора для IntelliJ IDEA теперь доступен в официальном репозитории плагинов JetBrains. Также плагин для IDEA теперь можно установить с помощью нашего Windows инсталлятора.
- В PVS-Studio Java плагины для IDEA, Maven и Gradle добавлен режим массового подавления предупреждений, который можно использовать для скрытия предупреждений на старом коде при внедрении анализатора в процесс разработки.
- Исправлена работа Compiler Monitoring на Windows при отслеживании сборки, запущенной из под Keil uVision в случае, когда имя пользователя в системе содержит нелатинские символы.
- V1037. Two or more case-branches perform the same actions.
- V2530. MISRA. The loop should be terminated with no more than one 'break' or 'goto' statement.
- V2531. MISRA. Expression of the essential 'foo' type should not be cast to the essential 'bar' type.
- V2532. MISRA. String literal should not be assigned to object unless it has type of pointer to const-qualified char.
- V2533. MISRA. C-style and functional notation casts should not be performed.
- V2534. MISRA. The loop counter should not have floating-point type.
- V2535. MISRA. Unreachable code should not be present in the project.
- V2536. MISRA. Function should not contain labels not used by any 'goto' statements.
- V2537. MISRA. Functions should not have unused parameters.
- V2538. MISRA. The value of uninitialized variable should not be used.
- V2539. MISRA. Class destructor should not exit with an exception.
- V2540. MISRA. Arrays should not be partially initialized.
- V2541. MISRA. Function should not be declared implicitly.
- V2542. MISRA. Function with a non-void return type should return a value from all exit paths.
PVS-Studio 7.01 (13 марта 2019)
- Ограничений количества переходов по сообщениям анализатора в Visual Studio в trial больше нет! В PVS-Studio для Windows теперь используется общая с остальными платформами trial модель - вы можете получить полнофункциональную лицензию, заполнив форму на странице загрузки анализатора.
- PVS-Studio C# диагностика V3080 (разыменование нулевой ссылки) теперь умеет находить потенциальные разыменования ссылок, которые могут принимать значение null в одной из веток выполнения. Улучшен межпроцедурный анализ.
- В Visual Studio плагине PVS-Studio добавлена возможность при работе с проектами, хранящимися в TFVC (Team Foundation Version Control), делать автоматический checkout suppress файлов (режим включается в Options... > Specific Analzyer Settings).
- V1036. Potentially unsafe double-checked locking.
- V2529. MISRA. Any label should be declared in the same block as 'goto' statement or in any block enclosing it.
PVS-Studio 7.00 (16 января 2019)
- В PVS-Studio версии 7.00 появился статический анализатор для Java. Подробнее обо всех нововведениях в PVS-Studio 7.00 можно почитать в нашем блоге.
- Плагин PVS-Studio для SonarQube обновлён для поддержки последней версии SonarQube 7.4. Минимальная версия SonarQube, поддерживаемая последней версией PVS-Studio плагина, увеличена до LTS версии SonarQube 6.7.
- V2526. MISRA. The function with the 'clock/time/difftime/ctime/ asctime/gmtime/localtime/mktime' name should not be used.
- V2527. MISRA. A switch-expression should not have Boolean type. Consider using of 'if-else' construct.
- V2528. MISRA. The comma operator should not be used.
- V6001. There are identical sub-expressions to the left and to the right of the 'foo' operator.
- V6002. The switch statement does not cover all values of the enum.
- V6003. The use of 'if (A) {...} else if (A) {...}' pattern was detected. There is a probability of logical error presence.
- V6004. The 'then' statement is equivalent to the 'else' statement.
- V6005. The 'x' variable is assigned to itself.
- V6006. The object was created but it is not being used. The 'throw' keyword could be missing.
- V6007. Expression is always true/false.
- V6008. Potential null dereference.
- V6009. Function receives an odd argument.
- V6010. The return value of function 'Foo' is required to be utilized.
- V6011. The expression contains a suspicious mix of integer and real types
- V6012. The '?:' operator, regardless of its conditional expression, always returns one and the same value.
- V6013. Comparison of arrays, strings, collections by reference. Possibly an equality comparison was intended.
- V6014. It's odd that this method always returns one and the same value of NN.
- V6015. Consider inspecting the expression. Probably the '!='/'-='/'+=' should be used here.
- V6016. Suspicious access to element by a constant index inside a loop.
- V6017. The 'X' counter is not used inside a nested loop. Consider inspecting usage of 'Y' counter.
- V6018. Constant expression in switch statement.
- V6019. Unreachable code detected. It is possible that an error is present.
- V6020. Division or mod division by zero.
- V6021. The value is assigned to the 'x' variable but is not used.
- V6022. Parameter is not used inside method's body.
- V6023. Parameter 'A' is always rewritten in method body before being used.
- V6024. The 'continue' operator will terminate 'do { ... } while (false)' loop because the condition is always false.
- V6025. Possibly index is out of bound.
- V6026. This value is already assigned to the 'b' variable.
- V6027. Variables are initialized through the call to the same function. It's probably an error or un-optimized code.
- V6028. Identical expressions to the left and to the right of compound assignment.
- V6029. Possible incorrect order of arguments passed to method.
- V6030. The function located to the right of the '|' and '&' operators will be called regardless of the value of the left operand. Consider using '||' and '&&' instead.
- V6031. The variable 'X' is being used for this loop and for the outer loop.
- V6032. It is odd that the body of 'Foo_1' function is fully equivalent to the body of 'Foo_2' function.
- V6033. An item with the same key has already been added.
- V6034. Shift by N bits is inconsistent with the size of type.
- V6035. Double negation is present in the expression: !!x.
- V6036. The value from the uninitialized optional is used.
- V6037. An unconditional 'break/continue/return/goto' within a loop.
- V6038. Comparison with 'double.NaN' is meaningless. Use 'double.isNaN()' method instead.
- V6039. There are two 'if' statements with identical conditional expressions. The first 'if' statement contains method return. This means that the second 'if' statement is senseless.
- V6040. The code's operational logic does not correspond with its formatting.
- V6041. Suspicious assignment inside the conditional expression of 'if/while/do...while' statement.
- V6042. The expression is checked for compatibility with type 'A', but is cast to type 'B'.
- V6043. Consider inspecting the 'for' operator. Initial and final values of the iterator are the same.
- V6044. Postfix increment/decrement is senseless because this variable is overwritten.
- V6045. Suspicious subexpression in a sequence of similar comparisons.
- V6046. Incorrect format. Consider checking the N format items of the 'Foo' function.
- V6047. It is possible that this 'else' branch must apply to the previous 'if' statement.
- V6048. This expression can be simplified. One of the operands in the operation equals NN. Probably it is a mistake.
- V6049. Classes that define 'equals' method must also define 'hashCode' method.
- V6050. Class initialization cycle is present.
- V6051. Use of jump statements in 'finally' block can lead to the loss of unhandled exceptions.
- V6052. Calling an overridden method in parent-class constructor may lead to use of uninitialized data.
- V6053. Collection is modified while iteration is in progress. ConcurrentModificationException may occur.
- V6054. Classes should not be compared by their name.
- V6055. Expression inside assert statement can change object's state.
- V6056. Implementation of 'compareTo' overloads the method from a base class. Possibly, an override was intended.
- V6057. Consider inspecting this expression. The expression is excessive or contains a misprint.
- V6058. The 'X' function receives objects of incompatible types.
- V6059. Odd use of special character in regular expression. Possibly, it was intended to be escaped.
- V6060. The reference was used before it was verified against null.
- V6061. The used constant value is represented by an octal form.
- V6062. Possible infinite recursion.
- V6063. Odd semicolon ';' after 'if/foreach' operator.
- V6064. Suspicious invocation of Thread.run().
- V6065. A non-serializable class should not be serialized.
- V6066. Passing objects of incompatible types to the method of collection.
PVS-Studio 6.27 (3 декабря 2018)
- Исходный код утилит для преобразования отчётов анализатора (plog converter) теперь доступен на нашем GitHub портале: https://github.com/viva64
- PVS-Studio теперь поддерживает стандарты написания кода MISRA C и MISRA C++. Список поддерживаемых диагностик будет постепенно расширяться в следующих версиях анализатора.
- V2501. MISRA. Octal constants should not be used.
- V2502. MISRA. The 'goto' statement should not be used.
- V2503. MISRA. Implicitly specified enumeration constants should be unique – consider specifying non-unique constants explicitly.
- V2504. MISRA. Size of an array is not specified.
- V2505. MISRA. The 'goto' statement shouldn't jump to a label declared earlier.
- V2506. MISRA. A function should have a single point of exit at the end.
- V2507. MISRA. The body of a loop\conditional statement should be enclosed in braces.
- V2508. MISRA. The function with the 'atof/atoi/atoll/atoll' name should not be used.
- V2509. MISRA. The function with the 'abort/exit/getenv/system' name should not be used.
- V2510. MISRA. The function with the 'qsort/bsearch' name should not be used.
- V2511. MISRA. Memory allocation and deallocation functions should not be used.
- V2512. MISRA. The macro with the 'setjmp' name and the function with the 'longjmp' name should not be used.
- V2513. MISRA. Unbounded functions performing string operations should not be used.
- V2514. MISRA. Unions should not be used.
- V2515. MISRA. Declaration should contain no more than two levels of pointer nesting.
- V2516. MISRA. The 'if' ... 'else if' construct shall be terminated with an 'else' statement.
- V2517. MISRA. Literal suffixes should not contain lowercase characters.
- V2518. MISRA. The 'default' label should be either the first or the last label of a 'switch' statement.
- V2519. MISRA. The 'default' label is missing in 'switch' statement.
- V2520. MISRA. Every switch-clause should be terminated by an unconditional 'break' or 'throw' statement.
- V2521. MISRA. Only the first member of enumerator list should be explicitly initialized, unless all members are explicitly initialized.
- V2522. MISRA. The 'switch' statement should have 'default' as the last label.
- V2523. MISRA. All integer constants of unsigned type should have 'u' or 'U' suffix.
- V2524. MISRA. A switch-label should only appear at the top level of the compound statement forming the body of a 'switch' statement.
- V2525. MISRA. Every 'switch' statement should contain non-empty switch-clauses.
PVS-Studio 6.26 (18 октября 2018)
- Добавлена поддержка проверки проектов для GNU Arm Embedded Toolchain, Arm Embedded GCC compiler.
- Добавлена возможность использовать pvsconfig файлы с CLMonitor/Standalone на Windows.
- При анализе проектов для Visual C++ компилятора (cl.exe, проекты vcxproj для Visual Studio/Standalone), в отчёте анализатора теперь сохраняется регистр в путях до проверенных файлов.
- Добавлен режим инкрементального анализа для pvs-studio-analzyer/CMake модуля. PVS-Studio CMake модуль можно теперь использовать на Windows для проектов, использующих компилятор Visual C++ (cl.exe).
- Добавлена поддержка инкрементального анализа для .NET Core/.NET Standard Visual Studio проектов.
- Добавлена возможность проверять проекты для сборочной системы WAF.
- V1021. The variable is assigned the same value on several loop iterations.
- V1022. An exception was thrown by pointer. Consider throwing it by value instead.
- V1023. A pointer without owner is added to the container by the 'emplace_back' method. A memory leak will occur in case of an exception.
- V1024. The stream is checked for EOF before reading from it, but is not checked after reading. Potential use of invalid data.
- V1025. Rather than creating 'std::unique_lock' to lock on the mutex, a new variable with default value is created.
- V1026. The variable is incremented in the loop. Undefined behavior will occur in case of signed integer overflow.
- V1027. Pointer to an object of the class is cast to unrelated class.
- V1028. Possible overflow. Consider casting operands, not the result.
- V1029. Numeric Truncation Error. Return value of function is written to N-bit variable.
- V1030. The variable is used after it was moved.
- V1031. Function is not declared. The passing of data to or from this function may be affected.
- V1032. Pointer is cast to a more strictly aligned pointer type.
- V1033. Variable is declared as auto in C. Its default type is int.
- V1034. Do not use real-type variables as loop counters.
- V1035. Only values that are returned from fgetpos() can be used as arguments to fsetpos().
- V2014. Don't use terminating functions in library code.
PVS-Studio 6.25 (20 августа 2018)
- Добавлена возможность в Visual Studio дабавлять в solution общий для всех проектов suppress файл.
- Для поддержки последних типов Visual Studio C++/C# проектов и новых возможностей языка C#, обновлены версии библиотек Roslyn и MSBuild.
- Улучшена проверка Multi-target C# проектов.
- В CMake модуле добавлена поддержка generator expressions и неявных зависимостей проверяемых файлов.
- У нас на сайте теперь можно посмотреть, как использовать PVS-Studio в рамках методологии безопасной разработки (SDL, Security Development Lifecycle) как SAST (Static Application Security Testing) инструмент. На этой странице есть отображение диагностических правил анализатора в формате CWE (Common Weakness Enumeration) и стандарте написания кода SEI CERT, прогресс по поддержке в PVS-Studio стандартов MISRA.
PVS-Studio 6.24 (14 июня 2018)
- Добавлена поддержка Texas Instruments Code Composer Studio, ARM компилятора для Windows\Linux
- Добавлена возможность сохранять дамп мониторинга и запускать анализ из этого дампа на Windows. Это позволяет перезапускать анализ без необходимости каждый раз пересобирать проект заново.
- Добавлен режим проверки отдельных файлов в cmd версии анализатора для Visual Studio проектов на Windows
- V1013. Suspicious subexpression in a sequence of similar comparisons.
- V1014. Structures with members of real type are compared byte-wise.
- V1015. Suspicious simultaneous use of bitwise and logical operators.
- V1016. The value is out of range of enum values. This causes unspecified or undefined behavior.
- V1017. Variable of the 'string_view' type references a temporary object which will be removed after evaluation of an expression.
- V1018. Usage of a suspicious mutex wrapper. It is probably unused, uninitialized, or already locked.
- V1019. Compound assignment expression is used inside condition.
- V1020. Function exited without performing epilogue actions. It is possible that there is an error.
PVS-Studio 6.23 (28 марта 2018)
- Мы выпустили PVS-Studio для macOS! Теперь проверять C и C++ код с помощью PVS-Studio можно не только в Windows/Linux, но и в macOS. Анализатор доступен в виде pkg-инсталлятора, tgz-архива и через менеджер пакетов Homebrew. Вы можете ознакомиться с документацией по работе с macOS-версией PVS-Studio здесь.
- V011. Presence of #line directives may cause some diagnostic messages to have incorrect file name and line number.
- V1011. Function execution could be deferred. Consider specifying execution policy explicitly.
- V1012. The expression is always false. Overflow check is incorrect.
PVS-Studio 6.22 (28 февраля 2018)
- Добавлена поддержка проверки проектов, использующих компиляторы Keil MDK ARM Compiler 5 и ARM Compiler 6.
- Добавлена поддержка проверки проектов, использующих компилятор IAR C/C++ Compiler for ARM.
- V1008. Consider inspecting the 'for' operator. No more than one iteration of the loop will be performed.
- V1009. Check the array initialization. Only the first element is initialized explicitly.
- V1010. Unchecked tainted data is used in expression.
PVS-Studio 6.21 (15 января 2018)
- Добавлена поддержка CWE (Common Weakness Enumeration) для C/C++/C# анализаторов.
- HTML отчёт с навигацией по коду можно теперь сохранять из Visual Studio плагинов и Standalone утилиты.
- Добавлена поддержка проверки WDK (Windows Driver Kit) проектов для Visual Studio 2017
- Плагин PVS-Studio для SonarQube обновлён для использования с последней LTS версией 6.7.
- V1007. The value from the uninitialized optional is used. Probably it is a mistake.
PVS-Studio 6.20 (1 декабря 2017)
- Вы можете сохранить результаты анализа в формате HTML с полной навигацией по коду.
- Добавлен режим NoNoise для отключения сообщений Low (третьего) уровня достоверности.
PVS-Studio 6.19 (14 ноября 2017)
- Добавлена возможность подавлять сообщения из XML отчёта (.plog) из командной строки в версии для Windows.
- Улучшены скорость и стабильности работы подавления сообщений и инкрементального анализа из Visual Studio плагинов при работе с очень большими (тысячи проектов) решениями.
- V1004. The pointer was used unsafely after it was verified against nullptr.
- V1005. The resource was acquired using 'X' function but was released using incompatible 'Y' function.
- V1006. Several shared_ptr objects are initialized by the same pointer. A double memory deallocation will occur.
PVS-Studio 6.18 (26 сентября 2017)
- В Linux-версии появилось расположение по умолчанию для файла лицензии.
- В Linux-версии появился механизм ввода лицензии (credentials).
- В Linux-версии появился отчет анализатора в HTML формате.
- В Windows-версии добавлена поддержка ASP.Net Core проектов.
- В Windows-версии улучшено масштабирование элементов интерфейса на разных DPI.
- В Windows-версии оптимизирована работа окна сообщений PVS-Studio при работе с большими отчётами, при выполнении сортировки по столбцам, при большом количестве выделенных сообщений.
- В плагине для Visual Studio удалена функциональность "Send to External Tool".
- В плагине для Visual Studio существенно изменены диалоги продления триала.
- V1002. A class, containing pointers, constructor and destructor, is copied by the automatically generated operator= or copy constructor.
- V1003. The macro is a dangerous, or the expression is suspicious.
PVS-Studio 6.17 (30 августа 2017)
- Поддержка обновления Visual Studio 2017 15.3.
- Добавлена возможность сохранять отчёт работы анализатора из Visual Studio плагина и Standalone в форматах txt\csv\html, без необходимости вручную вызывать PlogConverter.
- Лицензия и файл настроек теперь сохраняются в кодировке UTF-8.
- Добавлен список недавно открытых логов в меню Visual Studio плагина.
- Инкрементальный анализ в PVS-Studio_Cmd.exe - добавлена опция "AppendScan". Подробности в описании утилиты PVS-Studio_Cmd здесь.
- Добавлен плагин для отображения результатов анализа в системе непрерывной интеграции Jenkins (на Windows).
- Реализована версия плагина для системы непрерывного контроля качества SonarQube для Linux.
- Добавлена поддержка необработанного вывода C++ анализатора для утилиты PlogConverter.
- V821. The variable can be constructed in a lower level scope.
- V1001. The variable is assigned but is not used until the end of the function.
- V3135. The initial value of the index in the nested loop equals 'i'. Consider using 'i + 1' instead.
- V3136. Constant expression in switch statement.
- V3137. The variable is assigned but is not used until the end of the function.
PVS-Studio 6.16 (28 июня 2017)
- Основанные на clang toolset'ы поддержаны для Visual Studio 2015/2017.
- Директория решения теперь может использоваться как Source Tree Root в Visual Studio.
- V788. Review captured variable in lambda expression.
- V789. Iterators for the container, used in the range-based for loop, become invalid upon a function call.
- V790. It is odd that the assignment operator takes an object by a non-constant reference and returns this object.
- V791. The initial value of the index in the nested loop equals 'i'. Consider using 'i + 1' instead.
- V792. The function located to the right of the '|' and '&' operators will be called regardless of the value of the left operand. Consider using '||' and '&&' instead.
- V793. It is odd that the result of the statement is a part of the condition. Perhaps, this statement should have been compared with something else.
- V794. The copy operator should be protected from the case of this == &src.
- V795. Note that the size of the 'time_t' type is not 64 bits. After the year 2038, the program will work incorrectly.
- V796. A 'break' statement is probably missing in a 'switch' statement.
- V797. The function is used as if it returned a bool type. The return value of the function should probably be compared with std::string::npos.
- V798. The size of the dynamic array can be less than the number of elements in the initializer.
- V799. The variable is not used after memory has been allocated for it. Consider checking the use of this variable.
- V818. It is more efficient to use an initialization list rather than an assignment operator.
- V819. Decreased performance. Memory is allocated and released multiple times inside the loop body.
- V820. The variable is not used after copying. Copying can be replaced with move/swap for optimization.
PVS-Studio 6.15 (27 апреля 2017)
- Улучшена поддержка Visual Studio 2017.
- Исправлена ошибка с некоторыми .pch файлами.
- V782. It is pointless to compute the distance between the elements of different arrays.
- V783. Dereferencing of invalid iterator 'X' might take place.
- V784. The size of the bit mask is less than the size of the first operand. This will cause the loss of the higher bits.
- V785. Constant expression in switch statement.
- V786. Assigning the value C to the X variable looks suspicious. The value range of the variable: [A, B].
- V787. A wrong variable is probably used as an index in the for statement.
PVS-Studio 6.14 (17 марта 2017)
- Добавлена поддержка Visual Studio 2017.
- Добавлена поддержка Roslyn 2.0 / C# 7.0 в C# анализаторе PVS-Studio.
- Добавлена подсветка строк при просмотре сообщений анализатора в Visual Studio плагинах \ Standalone версии.
- Исправлена проблема проверки C++ проектов, которая могла возникнуть при запуске анализа на системе без установленной Visual Studio 2015 \ MSBuild 14.
- V780. The object of non-passive (non-PDS) type cannot be used with the function.
- V781. The value of the variable is checked after it was used. Perhaps there is a mistake in program logic. Check lines: N1, N2.
- V3131. The expression is checked for compatibility with type 'A' but is cast to type 'B'.
- V3132. A terminal null is present inside a string. '\0xNN' character sequence was encountered. Probably meant: '\xNN'.
- V3133. Postfix increment/decrement is meaningless because this variable is overwritten.
- V3134. Shift by N bits is greater than the size of type.
PVS-Studio 6.13 (27 января 2017)
- Добавлен режим инкрементального анализа для cmd версии анализатора (PVS-Studio_Cmd.exe). Подробности в документации.
- V779. Unreachable code detected. It is possible that an error is present.
- V3128. The field (property) is used before it is initialized in constructor.
- V3129. The value of the captured variable will be overwritten on the next iteration of the loop in each instance of anonymous function that captures it.
- V3130. Priority of the '&&' operator is higher than that of the '||' operator. Possible missing parentheses.
PVS-Studio 6.12 (22 декабря 2016)
- V773. The function was exited without releasing the pointer. A memory leak is possible.
- V774. The pointer was used after the memory was released.
- V775. It is odd that the BSTR data type is compared using a relational operator.
- V776. Potentially infinite loop. The variable in the loop exit condition does not change its value between iterations.
- V777. Dangerous widening type conversion from an array of derived-class objects to a base-class pointer.
- V778. Two similar code fragments were found. Perhaps, this is a typo and 'X' variable should be used instead of 'Y'.
- V3123. Perhaps the '??' operator works differently from what was expected. Its priority is lower than that of other operators in its left part.
- V3124. Appending an element and checking for key uniqueness is performed on two different variables.
- V3125. The object was used after it was verified against null. Check lines: N1, N2.
- V3126. Type implementing IEquatable<T> interface does not override 'GetHashCode' method.
PVS-Studio 6.11 (29 ноября 2016)
- V771. The '?:' operator uses constants from different enums.
- V772. Calling the 'delete' operator for a void pointer will cause undefined behavior.
- V817. It is more efficient to search for 'X' character rather than a string.
- V3119. Calling a virtual (overridden) event may lead to unpredictable behavior. Consider implementing event accessors explicitly or use 'sealed' keyword.
- V3120. Potentially infinite loop. The variable in the loop exit condition does not change its value between iterations.
- V3121. An enumeration was declared with 'Flags' attribute, but no initializers were set to override default values.
- V3122. Uppercase (lowercase) string is compared with a different lowercase (uppercase) string.
- Добавлена поддержка проверки Visual C++ проектов (.vcxproj) с Intel C++ toolset в плагине.
PVS-Studio 6.10 (25 октября 2016)
- Мы выпустили PVS-Studio для Linux! Теперь проверять C и C++ код с помощью PVS-Studio можно не только в Windows, но и в Linux. Анализатор доступен в виде пакетов для основных систем управления пакетами, легко интегрируется в распространённые системы сборки. Вы можете ознакомиться с документацией по работе с Linux-версией PVS-Studio здесь.
- В PVS-Studio для Windows новый интерфейс! Изменения произошли как в плагине для Visual Studio, так и в отдельном приложении Standalone.
- В PVS-Studio включена новая утилита BlameNotifier. С помощью нее можно легко организовать рассылку по e-mail сообщений PVS-Studio, сопоставленных с авторами кода в репозитории. Поддерживаются Git, Svn, Mercurial. Подробнее о работе с результатами анализа можно прочитать здесь.
- Добавлена поддержка проверки MSBuild проектов, использующих Intel C++ компилятор, при проверке кода из командной строки. Скоро мы добавим поддержку в плагине для Visual Studio.
- V769. The pointer in the expression equals nullptr. The resulting value is meaningless and should not be used.
- V770. Possible usage of a left shift operator instead of a comparison operator.
PVS-Studio 6.09 (6 октября 2016)
- При отключении всех групп диагностик анализатора (С++ или C#) анализ проектов для соответствующего языка запускаться не будет.
- Добавлена поддержка прокси с авторизацией при проверке обновлений и продлении триала.
- Поддержана возможность полностью отключать C/C++ или C# анализатор в .pvsconfig файлах (//-V::C++ и //-V::C#).
- В плагине SonarQube реализована функциональность для вычисления LOC и определения времени, необходимого для исправление найденных ошибок.
- V768. The '!' operator is applied to an enumerator.
- V3113. Consider inspecting the loop expression. It is possible that different variables are used inside initializer and iterator.
- V3114. IDisposable object is not disposed before method returns.
- V3115. It is not recommended to throw exceptions from 'Equals(object obj)' method.
- V3116. Consider inspecting the 'for' operator. It's possible that the loop will be executed incorrectly or won't be executed at all.
- V3117. Constructor parameter is not used.
- V3118. A component of TimeSpan is used, which does not represent full time interval. Possibly 'Total*' value was intended instead.
PVS-Studio 6.08 (22 августа 2016)
- В Visual Studio плагине отключена проверка из командной строки с помощью /command. Используйте отдельную утилиту PVS-Studio_Cmd.exe. Порядок работы с утилитой описан в документации.
- V3108. It is not recommended to return null or throw exceptions from 'ToSting()' method.
- V3109. The same sub-expression is present on both sides of the operator. The expression is incorrect or it can be simplified.
- V3110. Possible infinite recursion.
- V3111. Checking value for null will always return false when generic type is instantiated with a value type.
- V3112. An abnormality within similar comparisons. It is possible that a typo is present inside the expression.
PVS-Studio 6.07 (8 августа 2016)
- Мы движемся в сторону Linux! Пожалуйста, посмотрите, как запустить PVS-Studio в Linux.
- PVS-Studio больше не поддерживает работу на 32-битных операционных системах. Анализатор PVS-Studio (как C++, так и C# модули) для своей работы требует большого объёма оперативной памяти, особенно при параллельной проверке на нескольких ядрах процессора. Максимальный объём памяти, доступный в 32-битной системе, позволяет корректно использовать анализатор одновременно только на одном ядре (т.е. одновременно в один процесс). Причём в случае очень крупных проектов, даже этого объёма памяти может оказаться недостаточно. В связи с этим, а также по причине того, что очень небольшой процент наших пользователей всё ещё используют 32-битные ОС, мы решили прекратить поддержку 32-битной версии анализатора. Это позволит нам сконцентрировать все наши ресурсы на развитие 64-битной версии.
- В command line версии анализатора добавлена поддержка платформы непрерывного измерения качества SonarQube. Также в нашем дистрибутиве теперь есть плагин для интеграции результатов работы анализа с сервером SonarQube. Подробное описание плагина и новых режимов работы доступно здесь.
- V763. Parameter is always rewritten in function body before being used.
- V764. Possible incorrect order of arguments passed to function.
- V765. A compound assignment expression 'X += X + N' is suspicious. Consider inspecting it for a possible error.
- V766. An item with the same key has already been added.
- V767. Suspicious access to element by a constant index inside a loop.
- V3106. Possibly index is out of bound.
- V3107. Identical expressions to the left and to the right of compound assignment.
PVS-Studio 6.06 (7 июля 2016)
- V758. Reference invalidated, because of the destruction of the temporary object 'unique_ptr', returned by function.
- V759. Violated order of exception handlers. Exception caught by handler for base class.
- V760. Two identical text blocks detected. The second block starts with NN string.
- V761. NN identical blocks were found.
- V762. Consider inspecting virtual function arguments. See NN argument of function 'Foo' in derived class and base class.
- V3105. The 'a' variable was used after it was assigned through null-conditional operator. NullReferenceException is possible.
PVS-Studio 6.05 (9 июня 2016)
- Добавлена отдельная command line версия PVS-Studio, поддерживающая проверку vcxproj и csproj проектов (C++ и C#). Теперь нет необходимости использовать devenv.exe для ночных проверок. Подробнее об этом инструменте можно почитать здесь.
- Прекращена поддержка MSBuild плагина. Вместо него предлагается использовать отдельную command line версию PVS-Studio.
- V755. Copying from unsafe data source. Buffer overflow is possible.
- V756. The 'X' counter is not used inside a nested loop. Consider inspecting usage of 'Y' counter.
- V757. It is possible that an incorrect variable is compared with null after type conversion using 'dynamic_cast'.
- V3094. Possible exception when deserializing type. The Ctor(SerializationInfo, StreamingContext) constructor is missing.
- V3095. The object was used before it was verified against null. Check lines: N1, N2.
- V3096. Possible exception when serializing type. [Serializable] attribute is missing.
- V3097. Possible exception: type marked by [Serializable] contains non-serializable members not marked by [NonSerialized].
- V3098. The 'continue' operator will terminate 'do { ... } while (false)' loop because the condition is always false.
- V3099. Not all the members of type are serialized inside 'GetObjectData' method.
- V3100. Unhandled NullReferenceException is possible. Unhandled exceptions in destructor lead to termination of runtime.
- V3101. Potential resurrection of 'this' object instance from destructor. Without re-registering for finalization, destructor will not be called a second time on resurrected object.
- V3102. Suspicious access to element by a constant index inside a loop.
- V3103. A private Ctor(SerializationInfo, StreamingContext) constructor in unsealed type will not be accessible when deserializing derived types.
- V3104. 'GetObjectData' implementation in unsealed type is not virtual, incorrect serialization of derived type is possible.
PVS-Studio 6.04 (16 мая 2016)
- V753. The '&=' operation always sets a value of 'Foo' variable to zero.
- V754. The expression of 'foo(foo(x))' pattern is excessive or contains an error.
- V3082. The 'Thread' object is created but is not started. It is possible that a call to 'Start' method is missing.
- V3083. Unsafe invocation of event, NullReferenceException is possible. Consider assigning event to a local variable before invoking it.
- V3084. Anonymous function is used to unsubscribe from event. No handlers will be unsubscribed, as a separate delegate instance is created for each anonymous function declaration.
- V3085. The name of 'X' field/property in a nested type is ambiguous. The outer type contains static field/property with identical name.
- V3086. Variables are initialized through the call to the same function. It's probably an error or un-optimized code.
- V3087. Type of variable enumerated in 'foreach' is not guaranteed to be castable to the type of collection's elements.
- V3088. The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present.
- V3089. Initializer of a field marked by [ThreadStatic] attribute will be called once on the first accessing thread. The field will have default value on different threads.
- V3090. Unsafe locking on an object.
- V3091. Empirical analysis. It is possible that a typo is present inside the string literal. The 'foo' word is suspicious.
- V3092. Range intersections are possible within conditional expressions.
- V3093. The operator evaluates both operands. Perhaps a short-circuit operator should be used instead.
PVS-Studio 6.03 (5 апреля 2016)
- V751. Parameter is not used inside method's body.
- V752. Creating an object with placement new requires a buffer of large size.
- V3072. The 'A' class containing IDisposable members does not itself implement IDisposable.
- V3073. Not all IDisposable members are properly disposed. Call 'Dispose' when disposing 'A' class.
- V3074. The 'A' class contains 'Dispose' method. Consider making it implement 'IDisposable' interface.
- V3075. The operation is executed 2 or more times in succession.
- V3076. Comparison with 'double.NaN' is meaningless. Use 'double.IsNaN()' method instead.
- V3077. Property setter / event accessor does not utilize its 'value' parameter.
- V3078. Original sorting order will be lost after repetitive call to 'OrderBy' method. Use 'ThenBy' method to preserve the original sorting.
- V3079. 'ThreadStatic' attribute is applied to a non-static 'A' field and will be ignored.
- V3080. Possible null dereference.
- V3081. The 'X' counter is not used inside a nested loop. Consider inspecting usage of 'Y' counter.
- V051. Some of the references in project are missing or incorrect. The analysis results could be incomplete. Consider making the project fully compilable and building it before analysis.
PVS-Studio 6.02 (9 марта 2016)
- V3057. Function receives an odd argument.
- V3058. An item with the same key has already been added.
- V3059. Consider adding '[Flags]' attribute to the enum.
- V3060. A value of variable is not modified. Consider inspecting the expression. It is possible that other value should be present instead of '0'.
- V3061. Parameter 'A' is always rewritten in method body before being used.
- V3062. An object is used as an argument to its own method. Consider checking the first actual argument of the 'Foo' method.
- V3063. A part of conditional expression is always true/false.
- V3064. Division or mod division by zero.
- V3065. Parameter is not utilized inside method's body.
- V3066. Possible incorrect order of arguments passed to 'Foo' method.
- V3067. It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics.
- V3068. Calling overrideable class member from constructor is dangerous.
- V3069. It's possible that the line was commented out improperly, thus altering the program's operation logics.
- V3070. Uninitialized variables are used when initializing the 'A' variable.
- V3071. The object is returned from inside 'using' block. 'Dispose' will be invoked before exiting method.
PVS-Studio 6.01 (3 февраля 2016)
- V736. The behavior is undefined for arithmetic or comparisons with pointers that do not point to members of the same array.
- V737. It is possible that ',' comma is missing at the end of the string.
- V738. Temporary anonymous object is used.
- V739. EOF should not be compared with a value of the 'char' type. Consider using the 'int' type.
- V740. Because NULL is defined as 0, the exception is of the 'int' type. Keyword 'nullptr' could be used for 'pointer' type exception.
- V741. The following pattern is used: throw (a, b);. It is possible that type name was omitted: throw MyException(a, b);..
- V742. Function receives an address of a 'char' type variable instead of pointer to a buffer.
- V743. The memory areas must not overlap. Use 'memmove' function.
- V744. Temporary object is immediately destroyed after being created. Consider naming the object.
- V745. A 'wchar_t *' type string is incorrectly converted to 'BSTR' type string.
- V746. Object slicing. An exception should be caught by reference rather than by value.
- V747. An odd expression inside parenthesis. It is possible that a function name is missing.
- V748. Memory for 'getline' function should be allocated only by 'malloc' or 'realloc' functions. Consider inspecting the first parameter of 'getline' function.
- V749. Destructor of the object will be invoked a second time after leaving the object's scope.
- V750. BSTR string becomes invalid. Notice that BSTR strings store their length before start of the text.
- V816. It is more efficient to catch exception by reference rather than by value.
- V3042. Possible NullReferenceException. The '?.' and '.' operators are used for accessing members of the same object.
- V3043. The code's operational logic does not correspond with its formatting.
- V3044. WPF: writing and reading are performed on a different Dependency Properties.
- V3045. WPF: the names of the property registered for DependencyProperty, and of the property used to access it, do not correspond with each other.
- V3046. WPF: the type registered for DependencyProperty does not correspond with the type of the property used to access it.
- V3047. WPF: A class containing registered property does not correspond with a type that is passed as the ownerType.type.
- V3048. WPF: several Dependency Properties are registered with a same name within the owner type.
- V3049. WPF: readonly field of 'DependencyProperty' type is not initialized.
- V3050. Possibly an incorrect HTML. The </XX> closing tag was encountered, while the </YY> tag was expected.
- V3051. An excessive type cast or check. The object is already of the same type.
- V3052. The original exception object was swallowed. Stack of original exception could be lost.
- V3053. An excessive expression. Examine the substrings "abc" and "abcd".
- V3054. Potentially unsafe double-checked locking. Use volatile variable(s) or synchronization primitives to avoid this.
- V3055. Suspicious assignment inside the condition expression of 'if/while/for' operator.
- V3056. Consider reviewing the correctness of 'X' item's usage.
PVS-Studio 6.00 (22 декабря 2015)
- Появился статический анализ кода для C#: в первой версии более 40 диагностик.
- Прекращена поддержка Visual Studio 2005 и Visual Studio 2008.
- V734. Searching for the longer substring is meaningless after searching for the shorter substring.
- V735. Possibly an incorrect HTML. The "</XX" closing tag was encountered, while the "</YY" tag was expected.
- V3001. There are identical sub-expressions to the left and to the right of the 'foo' operator.
- V3002. The switch statement does not cover all values of the enum.
- V3003. The use of 'if (A) {...} else if (A) {...}' pattern was detected. There is a probability of logical error presence.
- V3004. The 'then' statement is equivalent to the 'else' statement.
- V3005. The 'x' variable is assigned to itself.
- V3006. The object was created but it is not being used. The 'throw' keyword could be missing.
- V3007. Odd semicolon ';' after 'if/for/while' operator.
- V3008. The 'x' variable is assigned values twice successively. Perhaps this is a mistake.
- V3009. It's odd that this method always returns one and the same value of NN.
- V3010. The return value of function 'Foo' is required to be utilized.
- V3011. Two opposite conditions were encountered. The second condition is always false.
- V3012. The '?:' operator, regardless of its conditional expression, always returns one and the same value.
- V3013. It is odd that the body of 'Foo_1' function is fully equivalent to the body of 'Foo_2' function.
- V3014. It is likely that a wrong variable is being incremented inside the 'for' operator. Consider reviewing 'X'.
- V3015. It is likely that a wrong variable is being compared inside the 'for' operator. Consider reviewing 'X'.
- V3016. The variable 'X' is being used for this loop and for the outer loop.
- V3017. A pattern was detected: A || (A && ...). The expression is excessive or contains a logical error.
- V3018. Consider inspecting the application's logic. It's possible that 'else' keyword is missing.
- V3019. It is possible that an incorrect variable is compared with null after type conversion using 'as' keyword.
- V3020. An unconditional 'break/continue/return/goto' within a loop.
- V3021. There are two 'if' statements with identical conditional expressions. The first 'if' statement contains method return. This means that the second 'if' statement is senseless.
- V3022. Expression is always true/false.
- V3023. Consider inspecting this expression. The expression is excessive or contains a misprint.
- V3024. An odd precise comparison. Consider using a comparison with defined precision: Math.Abs(A - B) < Epsilon or Math.Abs(A - B) > Epsilon.
- V3025. Incorrect format. Consider checking the N format items of the 'Foo' function.
- V3026. The constant NN is being utilized. The resulting value could be inaccurate. Consider using the KK constant.
- V3027. The variable was utilized in the logical expression before it was verified against null in the same logical expression.
- V3028. Consider inspecting the 'for' operator. Initial and final values of the iterator are the same.
- V3029. The conditional expressions of the 'if' operators situated alongside each other are identical.
- V3030. Recurring check. This condition was already verified in previous line.
- V3031. An excessive check can be simplified. The operator '||' operator is surrounded by opposite expressions 'x' and '!x'.
- V3032. Waiting on this expression is unreliable, as compiler may optimize some of the variables. Use volatile variable(s) or synchronization primitives to avoid this.
- V3033. It is possible that this 'else' branch must apply to the previous 'if' statement.
- V3034. Consider inspecting the expression. Probably the '!=' should be used here.
- V3035. Consider inspecting the expression. Probably the '+=' should be used here.
- V3036. Consider inspecting the expression. Probably the '-=' should be used here.
- V3037. An odd sequence of assignments of this kind: A = B; B = A;.
- V3038. The 'first' argument of 'Foo' function is equal to the 'second' argument
- V3039. Consider inspecting the 'Foo' function call. Defining an absolute path to the file or directory is considered a poor style.
- V3040. The expression contains a suspicious mix of integer and real types.
- V3041. 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.
PVS-Studio 5.31 (3 ноября 2015)
- Снижено количество ложных срабатываний для некоторых диагностик.
PVS-Studio 5.30 (29 октября 2015)
- Добавлена поддержка навигации по многострочным сообщениям с помощью двойного клика.
- Исправлена ошибка доступа при запуске препроцессора Visual C++ для проверки файлов, использующих директиву #import.
- Исправлена ошибка работы Compiler Monitoring при длительности препроцессирования более 10 минут.
- Исправлена некорректная работа инсталлятора на системах, имеющих только 2015 версию Visual Studio.
- Новая диагностика – V728. An excessive check can be simplified. The '||' operator is surrounded by opposite expressions 'x' and '!x'.
- Новая диагностика – V729. Function body contains the 'X' label that is not used by any 'goto' statements.
- Новая диагностика – V730. Not all members of a class are initialized inside the constructor.
- Новая диагностика – V731. The variable of char type is compared with pointer to string.
- Новая диагностика – V732. Unary minus operator does not modify a bool type value.
- Новая диагностика – V733. It is possible that macro expansion resulted in incorrect evaluation order.
PVS-Studio 5.29 (22 сентября 2015)
- Добавлена поддержка Visual Studio 2015.
- Добавлена поддержка Windows 10.
- Новая диагностика – V727. Return value of 'wcslen' function is not multiplied by 'sizeof(wchar_t)'.
PVS-Studio 5.28 (10 августа, 2015)
- Новый интерфейс страниц настроек Detectable Errors, Don't Check Files и Keyword Message Filering.
- Добавлена утилита PlogConverter для преобразования XML plog файлов в текстовый, html и CSV форматы. Подробности в документации.
PVS-Studio 5.27 (28 июля, 2015)
- Новая диагностика – V207. A 32-bit variable is utilized as a reference to a pointer. A write outside the bounds of this variable may occur.
- Новая диагностика - V726. An attempt to free memory containing the 'int A[10]' array by using the 'free(A)' function.
- Новая возможность - Формирование статистики работы анализатора в виде графиков. Анализатор PVS-Studio позволяет собирать статистику своей работы - количество найденных сообщений (включая подавленные) на разных уровнях и группах диагностик. Собранная статистика может быть отфильтрована и отображена в виде графика в документе Microsoft Excel, показывающего динамику изменения сообщений в проверяемом проекте.
- Удален режим проверки заранее препроцессированных файлов в Standalone.
PVS-Studio 5.26 (30 июня, 2015)
- Новая диагностика – V723. Function returns a pointer to the internal string buffer of a local object, which will be destroyed.
- Новая диагностика – V724. Converting integers or pointers to BOOL can lead to a loss of high-order bits. Non-zero value can become 'FALSE'.
- Новая диагностика – V725. A dangerous cast of 'this' to 'void*' type in the 'Base' class, as it is followed by a subsequent cast to 'Class' type.
- Добавлена поддержка подавления сообщений (Message Suppression) в CLMonitoring/Standalone.
- 2 и 3 уровни сообщений анализатора доступны в Trial режиме.
PVS-Studio 5.25 (12 мая 2015)
- Новая диагностика – V722. An abnormality within similar comparisons. It is possible that a typo is present inside the expression.
- Улучшена "отзывчивость" интерфейса функций выбора анализаторов и команды Quick Filters в окне PVS-Studio Output Window.
- Кнопка 'False Alarms' перемещена из окна PVS-Studio в настройки анализатора.
- Исправлена ошибка 'An item with the same key has already been added', возникающая при использовании механизма массового подавления сообщений.
PVS-Studio 5.24 (10 апреля 2015)
PVS-Studio 5.23 (17 марта 2015)
- Существенно улучшен анализатор проблем 64-битных приложений. Теперь если вы хотите исправить основные проблемы 64-битного кода, вам достаточно поправить все сообщения 1 уровня в 64-битном анализе.
- Теперь вы можете использовать автоматическое обновление PVS-Studio на билд-сервере. Подробнее здесь.
- Новая диагностика – V719. The switch statement does not cover all values of the enum.
- Новая диагностика – V720. It is advised to utilize the 'SuspendThread' function only when developing a debugger (see documentation for details).
- Новая диагностика – V221. Suspicious sequence of types castings: pointer -> memsize -> 32-bit integer.
- Новая диагностика – V2013. Consider inspecting the correctness of handling the N argument in the 'Foo' function.
PVS-Studio 5.22 (17 февраля 2015)
- Новая диагностика – V718. The 'Foo' function should not be called from 'DllMain' function.
- Исправлена работа CLMonitoring с C++/CLI проектами.
- Исправлена утечка памяти при длительной работе CLMonitoring.
- Новая система поиска include\символов в Standalone.
- Оптимизировано потребление памяти при использовании функции подавления сообщений (Message Suppression).
- В системе подавления (Message Suppression) добавлена поддержка сообщений, выдаваемых на несколько IDE проектов (например, сообщения на общие h файлы).
- Улучшена логика работы системы подавления сообщений (Message Suppression).
PVS-Studio 5.21 (11 декабря 2014)
- Мы прекратили поддержку среды разработки Embarcadero RAD Studio.
- Мы прекратили поддержку диагностик проблем OpenMP (набор правил VivaMP).
- Новая диагностика – V711. It is dangerous to create a local variable within a loop with a same name as a variable controlling this loop.
- Новая диагностика – V712. Be advised that compiler may delete this cycle or make it infinity. Use volatile variable(s) or synchronization primitives to avoid this.
- Новая диагностика – V713. The pointer was utilized in the logical expression before it was verified against nullptr in the same logical expression.
- Новая диагностика – V714. Variable is not passed into foreach loop by a reference, but its value is changed inside of the loop.
- Новая диагностика – V715. The 'while' operator has empty body. Suspicious pattern detected.
- Новая диагностика – V716. Suspicious type conversion: HRESULT -> BOOL (BOOL -> HRESULT).
- Новая диагностика – V717. It is strange to cast object of base class V to derived class U.
PVS-Studio 5.20 (12 ноября 2014)
- Новая диагностика – V706. Suspicious division: sizeof(X) / Value. Size of every element in X array does not equal to divisor.
- Новая диагностика – V707. Giving short names to global variables is considered to be bad practice.
- Новая диагностика – V708. Dangerous construction is used: 'm[x] = m.size()', where 'm' is of 'T' class. This may lead to undefined behavior.
- Новая диагностика – V709. Suspicious comparison found: 'a == b == c'. Remember that 'a == b == c' is not equal to 'a == b && b == c.
- Новая диагностика – V710. Suspicious declaration found. There is no point to declare constant reference to a number.
- Новая диагностика – V2012. Possibility of decreased performance. It is advised to pass arguments to std::unary_function/std::binary_function template as references.
- Новая возможность - Массовое подавление сообщений анализатора. Иногда на стадии внедрения статического анализа, особенно на крупных проектах, разработчик не хочет (или даже не имеет возможности) править сотни, а иногда и тысячи, сообщений анализатора, сгенерированных на существующую кодовую базу. В такой ситуации возникает необходимость "убрать" все выданные на текущий код сообщения, и в дальнейшем работать только с сообщениями, относящимися к вновь написанному или модифицированному коду, т.е. коду, который ещё не отлажен и может потенциально содержать большое количество ошибок.
PVS-Studio 5.19 (18 сентября 2014)
- Новая диагностика – V698. strcmp()-like functions can return not only the values -1, 0 and 1, but any values.
- Новая диагностика – V699. Consider inspecting the 'foo = bar = baz ? .... : ....' expression. It is possible that 'foo = bar == baz ? .... : ....' should be used here instead.
- Новая диагностика – V700. Consider inspecting the 'T foo = foo = x;' expression. It is odd that variable is initialized through itself.
- Новая диагностика – V701. realloc() possible leak: when realloc() fails in allocating memory, original pointer is lost. Consider assigning realloc() to a temporary pointer.
- Новая диагностика – V702. Classes should always be derived from std::exception (and alike) as 'public'.
- Новая диагностика – V703. It is odd that the 'foo' field in derived class overwrites field in base class.
- Новая диагностика – V704. 'this == 0' comparison should be avoided - this comparison is always false on newer compilers.
- Новая диагностика – V705. It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics.
PVS-Studio 5.18 (30 июля 2014)
- ClMonitoring - автоматическое определение платформы компилятора.
- ClMonitoring - увеличение скорости работы за счёт уменьшения влияния антивирусов на этапе препроцессирования проверяемых файлов.
- CLMonitoring - исправлена некорректная обработка 64-битных процессов после системного обновления .NET Framework 4.
- Новая диагностика – V695. Range intersections are possible within conditional expressions.
- Новая диагностика – V696. The 'continue' operator will terminate 'do { ... } while (FALSE)' loop because the condition is always false.
- Новая диагностика – V697. A number of elements in the allocated array is equal to size of a pointer in bytes.
- Новая диагностика – V206. Explicit conversion from 'void *' to 'int *'.
- Новая диагностика – V2011. Consider inspecting signed and unsigned function arguments. See NN argument of function 'Foo' in derived class and base class.
PVS-Studio 5.17 (20 мая 2014)
- Новая диагностика – V690. The class implements a copy constructor/operator=, but lacks the the operator=/copy constructor.
- Новая диагностика – V691. Empirical analysis. It is possible that a typo is present inside the string literal. The 'foo' word is suspicious.
- Новая диагностика – V692. An inappropriate attempt to append a null character to a string. To determine the length of a string by 'strlen' function correctly, a string ending with a null terminator should be used in the first place.
- Новая диагностика – V693. Consider inspecting conditional expression of the loop. It is possible that 'i < X.size()' should be used instead of 'X.size()'.
- Новая диагностика – V694. The condition (ptr - const_value) is only false if the value of a pointer equals a magic constant.
- Новая диагностика – V815. Decreased performance. Consider replacing the expression 'AA' with 'BB'.
- Новая диагностика – V2010. Handling of two different exception types is identical.
PVS-Studio 5.16 (29 апреля 2014)
- Существенно улучшена поддержка С++/CLI. проектов.
- Плагин TFSRipper был удален.
- Исправлено падение в Standalone при установке в место не по умолчанию на 64-битных системах.
- Исправлена ошибка из-за которой в некоторых ситуациях не показывались некоторые диагностические сообщения.
PVS-Studio 5.15 (14 апреля 2014)
- Новая диагностика – V689. The destructor of the 'Foo' class is not declared as a virtual. It is possible that a smart pointer will not destroy an object correctly.
- Существенные улучшения в подсистеме Мониторинг компилятора в PVS-Studio.
PVS-Studio 5.14 (12 марта 2014)
- Новая опция "DIsable 64-bit Analysis" в специальных настройках анализатора позволяет немного увеличить скорость анализа и существенно уменьшить размер .plog файла.
- Новая возможность: Мониторинг компилятора в PVS-Studio.
- Исправлена проблема с нотификацией при инкрементальном анализе и окне PVS-Studio со стилем auto hide.
- Новая диагностика – V687. Size of an array calculated by the sizeof() operator was added to a pointer. It is possible that the number of elements should be calculated by sizeof(A)/sizeof(A[0]).
- Новая диагностика – V688. The 'foo' local variable possesses the same name as one of the class members, which can result in a confusion.
PVS-Studio 5.13 (5 февраля 2014)
- Добавлена поддержка для Emarcadero RAD Studio XE5.
- Новая диагностика – V684. A value of variable is not modified. Consider inspecting the expression. It is possible that '1' should be present instead of '0'.
- Новая диагностика – V685. Consider inspecting the return statement. The expression contains a comma.
- Новая диагностика – V686. A pattern was detected: A || (A && ...). The expression is excessive or contains a logical error.
PVS-Studio 5.12 (23 декабря 2013)
- Исправлена ошибка при работе в режиме прямой интеграции в сборку MSBuild для проектов, использующих свойство SolutionDir.
- Появилась возможность запуска проверки из контекстного меню Solution Explorer.
- Теперь в окне PVS-Studio Output Window по умолчанию не показывается ID сообщения об ошибке. Вернуть показ ID можно с помощью команды Show Columns -> ID.
- Новая диагностика – V682. Suspicious literal is present: '/r'. It is possible that a backslash should be used here instead: '\r'.
- Новая диагностика – V683. Consider inspecting the loop expression. It is possible that the 'i' variable should be incremented instead of the 'n' variable.
PVS-Studio 5.11 (6 ноября 2013)
- Поддержана release-версия Microsoft Visual Studio 2013.
- Новая диагностика – V680. The 'delete A, B' expression only destroys the 'A' object. Then the ',' operator returns a resulting value from the right side of the expression.
- Новая диагностика – V681. The language standard does not define an order in which the 'Foo' functions will be called during evaluation of arguments.
PVS-Studio 5.10 (7 октября 2013)
- Исправлена работа анализатора при запуске Visual Studio с параметром /useenv: devenv.exe /useenv.
- В VS2012 наконец-то стало возможно использовать Clang в качестве препроцессора. Для пользователей PVS-Studio это означает существенное увеличение скорости работы анализатора в VS2012.
- Серьезно улучшена работа анализатора при разборе кода в среде VS2012.
- В дистрибутиве PVS-Studio появилось новое приложение Standalone.
- Появилась возможность экспорта результатов анализа в .CSV-файл для дальнейшей работы с ним из Excel.
- Существенно улучшена поддержка precompiled headers в Visual Studio и MSBuild.
- Новая диагностика – V676. It is incorrect to compare the variable of BOOL type with TRUE.
- Новая диагностика – V677. Custom declaration of a standard type. The declaration from system header files should be used instead.
- Новая диагностика – V678. An object is used as an argument to its own method. Consider checking the first actual argument of the 'Foo' function.
- Новая диагностика – V679. The 'X' variable was not initialized. This variable is passed by a reference to the 'Foo' function in which its value will be utilized.
PVS-Studio 5.06 (13 августа 2013)
- Исправлено некорректное определение числа файлов при использовании команды 'Check Open File(s)' в среде Visual Studio 2010.
- Новая диагностика – V673. More than N bits are required to store the value, but the expression evaluates to the T type which can only hold K bits.
- Новая диагностика – V674. The expression contains a suspicious mix of integer and real types.
- Новая диагностика – V675. Writing into the read-only memory.
- Новая диагностика – V814. Decreased performance. The 'strlen' function was called multiple times inside the body of a loop.
PVS-Studio 5.05 (28 мая 2013)
- Добавлена поддержка прокси-сервера с авторизацией для окна продления триал-режима.
- Исправлена проблема с использованием некоторых специальных символов в фильтрах диагностических сообщений.
- Часть настроек страницы Common Analyzer Settings и все настройки страницы Customer Specific Settings объединены в новую страницу настроек: Specific Analyzer Settings.
- Реализована настройка SaveModifiedLog, позволяющая определить поведение диалога сохранения нового\модифицированного отчёта работы анализатора (всегда спрашивать, сохранять автоматически, не сохранять).
- Пользовательские диагностики (V20xx) выделены в отдельную группу (CS – Customer Specific).
- Добавлена новая команда меню "Check Open File(s)", позволяющая проверить все открытые в редакторе IDE исходные C/C++ файлы.
PVS-Studio 5.04 (14 мая 2013)
- Добавлена поддержка C++Builder XE4. Теперь PVS-Studio поддерживает следующие версии C++Builder: XE4, XE3 Update 1, XE2, XE, 2010, 2009.
- Новая диагностика – V669. The argument is a non-constant reference. The analyzer is unable to determine the position at which this argument is being modified. It is possible that the function contains an error.
- Новая диагностика – V670. An uninitialized class member is used to initialize another member. Remember that members are initialized in the order of their declarations inside a class.
- Новая диагностика – V671. It is possible that the 'swap' function interchanges a variable with itself.
- Новая диагностика – V672. There is probably no need in creating a new variable here. One of the function's arguments possesses the same name and this argument is a reference.
- Новая диагностика – V128. A variable of the memsize type is read from a stream. Consider verifying the compatibility of 32 and 64 bit versions of the application in the context of a stored data.
- Новая диагностика – V813. Decreased performance. The argument should probably be rendered as a constant pointer/reference.
- Новая диагностика – V2009. Consider passing the 'Foo' argument as a constant pointer/reference.
PVS-Studio 5.03 (16 апреля 2013)
- Улучшена производительность анализа/интерфейса при проверке крупных проектов и генерации большого числа диагностических сообщений (имеется в виду общее количество неотфильтрованных сообщений).
- Исправлена некорректная интеграция плагина PVS-Studio в среды разработки C++Builder 2009/2010/XE после установки.
- Исправлена ошибка работы в trial-режиме.
- Добавлена возможность использовать относительные пути в файлах-отчётах анализатора.
- Реализована поддержка прямой интеграции анализатора в сборочную систему MSBuild.
- Появилась настройка IntegratedHelpLanguage на странице Customer's Settings. Настройка позволяет задать язык для встроенной справки по диагностическим сообщениям (клик по коду ошибки в окне вывода сообщений PVS-Studio) и документации (команда меню PVS-Studio -> Help -> Open PVS-Studio Documentation (html, online)) PVS-Studio, доступных на нашем сайте. Данная настройка не изменяет языка интерфейса IDE плагина PVS-Studio или выдаваемых анализатором диагностических сообщений.
- Исправлен режим запуска анализа из командной строки для Visual Studio 2012 в случае фоновой подгрузки проектов.
- Новая диагностика – V665. Possibly, the usage of '#pragma warning(default: X)' is incorrect in this context. The '#pragma warning(push/pop)' should be used instead.
- Новая диагностика – V666. Consider inspecting NN argument of the function 'Foo'. It is possible that the value does not correspond with the length of a string which was passed with the YY argument.
- Новая диагностика – V667. The 'throw' operator does not possess any arguments and is not situated within the 'catch' block.
- Новая диагностика – V668. There is no sense in testing the pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
- Новая диагностика – V812. Decreased performance. Ineffective use of the 'count' function. It can possibly be replaced by the call to the 'find' function.
PVS-Studio 5.02 (6 марта 2013)
- Исправлена некорректная навигация у C++Builder модулей, содержащих несколько заголовочных\исходных файлов.
- Добавлена возможность вставки пользовательских комментариев (например, для использования в системах автоматической генерации документации) при разметке кода маркерами ложных срабатываний (False Alarm).
- Исправлен некорректный запуск C++ препроцессора у некоторых файлов, использующих precompiled заголовки.
- Новая диагностика – V663. Infinite loop is possible. The 'cin.eof()' condition is insufficient to break from the loop. Consider adding the 'cin.fail()' function call to the conditional expression.
- Новая диагностика – V664. The pointer is being dereferenced on the initialization list before it is verified against null inside the body of the constructor function.
- Новая диагностика – V811. Decreased performance. Excessive type casting: string -> char * -> string.
PVS-Studio 5.01 (13 февраля 2013)
- Добавлена поддержка некоторых прошлых версий C++Builder. Теперь PVS-Studio поддерживает следующие версии C++Builder: XE3 Update 1, XE2, XE, 2010, 2009.
- Исправлена ошибка, связанная с некорректным запуском инкрементального анализа в версии для C++Builder в некоторых ситуациях.
- Исправлена ошибка с функцией Mark As False Alarm в версии для C++Builder.
- Исправлена ошибка связанная неправильным отображением локализованных имен файлов в версии для C++Builder.
- Исправлена проблема с открытием исходных файлов при переходе по диагностическому сообщению в версии для C++Buidler.
- Исправлена неполная обработка системных include путей при запуске препроцессора для анализатора в версии для C++Builder.
- Новая диагностика – V661. A suspicious expression 'A[B < C]'. Probably meant 'A[B] < C'.
- Новая диагностика – V662. Consider inspecting the loop expression. Different containers are utilized for setting up initial and final values of the iterator.
PVS-Studio 5.00 (31 января 2013)
- Появилась интеграция в Embarcadero RAD Studio, точнее в Embarcadero C++Builder! Теперь пользователям C++Builder доступны диагностические возможности PVS-Studio. Если раньше PVS-Studio можно было удобно использовать только в Visual Studio окружении, то теперь C++-разработчики, выбравшие продукты Embarcadero также могут использовать инструмент статического анализа PVS-Studio. В настоящее время поддерживаются версии XE2 и XE3, включая XE3 Update 1 с поддержкой 64-битного компилятора.
- Реализована поддержка Microsoft Design Language (ранее известного как Metro Language) C++/CX проектов для Windows 8 Store (WinRT) на платформах x86/ARM и Windows Phone 8 проектов.
- Исправление для пользователей Clang-препроцессора в версии для Visual Studio. Раньше при проверке Boost-проектов были ошибки препроцессирования, из-за которых в таких проектах нельзя было использовать Clang в качестве препроцессора. В настоящее время эти ошибки устранены. Это позволяет существенно быстрее проверять проекты с Boost при использовании препроцессора Clang.
- Удалена страница настроек Viva64, так как она устарела.
- Переименовано сообщение V004 – теперь оно более корректно.
- Новая диагностика – V810. Decreased performance. The 'A' function was called several times with identical arguments. The result should possibly be saved to a temporary variable, which then could be used while calling the 'B' function.
- Новая диагностика – V2008. Cyclomatic complexity: NN. Consider refactoring the 'Foo' function.
- Новая диагностика – V657. It's odd that this function always returns one and the same value of NN.
- Новая диагностика – V658. A value is being subtracted from the unsigned variable. This can result in an overflow. In such a case, the comparison operation can potentially behave unexpectedly.
- Новая диагностика – V659. Declarations of functions with 'Foo' name differ in the 'const' keyword only, but the bodies of these functions have different composition. This is suspicious and can possibly be an error.
- Новая диагностика – V660. The program contains an unused label and a function call: 'CC:AA()'. It's possible that the following was intended: 'CC::AA()'.
PVS-Studio 4.77 (11 декабря 2012)
- Улучшен сбор параметров компиляции для VS2012 и VS2010 за счет расширения поддержки MSBuild.
- Новая диагностика – V654. The condition of loop is always true/false.
- Новая диагностика – V655. The strings was concatenated but are not utilized. Consider inspecting the expression.
- Новая диагностика – V656. Variables are initialized through the call to the same function. It's probably an error or un-optimized code.
- Новая диагностика – V809. Verifying that a pointer value is not NULL is not required. The 'if (ptr != NULL)' check can be removed.
PVS-Studio 4.76 (23 ноября 2012)
- Исправлены некоторые ошибки.
PVS-Studio 4.75 (12 ноября 2012)
- Исправлена ошибка, проявляющаяся в некоторых определенных условиях при проверке проектов на основе библиотеки Qt (подробности в блоге).
- Новая диагностика – V646. Consider inspecting the application's logic. It's possible that 'else' keyword is missing.
- Новая диагностика – V647. The value of 'A' type is assigned to the pointer of 'B' type.
- Новая диагностика – V648. Priority of the '&&' operation is higher than that of the '||' operation.
- Новая диагностика – V649. There are two 'if' statements with identical conditional expressions. The first 'if' statement contains function return. This means that the second 'if' statement is senseless.
- Новая диагностика – V650. Type casting operation is utilized 2 times in succession. Next, the '+' operation is executed. Probably meant: (T1)((T2)a + b).
- Новая диагностика – V651. An odd operation of the 'sizeof(X)/sizeof(T)' kind is performed, where 'X' is of the 'class' type.
- Новая диагностика – V652. The operation is executed 3 or more times in succession.
- Новая диагностика – V653. A suspicious string consisting of two parts is used for array initialization. It is possible that a comma is missing.
- Новая диагностика – V808. An array/object was declared but was not utilized.
- Новая диагностика – V2007. This expression can be simplified. One of the operands in the operation equals NN. Probably it is a mistake.
PVS-Studio 4.74 (16 октября 2012)
- Новая опция "Incremental Results Display Depth". Настройка задаёт режим отображения уровней сообщений в окне PVS-Studio Output для результатов работы инкрементального анализа. Установка в данном поле глубины уровня отображения (соответственно, только 1 уровень; 1 и 2 уровни; 1, 2 и 3 уровни) приведёт к автоматическому включению данных уровней после завершения инкрементального анализа.
- Новая опция "External Tool Path". Данное поле позволяет задать абсолютный путь до любой внешней утилиты, которую можно запустить с помощью команды контекстного меню "Send this message to external tool" окна PVS-Studio Output. Данная команда доступна для одного одновременно выделенного сообщения в таблице результатов, позволяя передать в заданную здесь утилиту определённые в поле настроек ExternalToolCommandLine параметры командной строки. Подробное описание этого режима с примерами доступно по этой ссылке.
PVS-Studio 4.73 (17 сентября 2012)
- Исправлены ошибки в обработке некоторых C++11 конструкций из Visual Studio 2012.
- Реализована полная поддержка тем для Visual Studio 2012.
- Добавлен быстрый по полю Project в окне PVS-Studio Output Window.
- Обновлена версия Clang, используемого в качестве препроцессора.
- Добавлена поддержка TenAsys INtime.
PVS-Studio 4.72 (30 августа 2012)
- Поддержка финальной версии Microsoft Visual Studio 2012.
- Используется новая версия компонента SourceGrid благодаря чему исправлено несколько недостатков, проявляющихся при работе с окном PVS-Studio Output Window.
- Поддержана диагностика проблем в библиотеке STL при использовании STLport.
- Новая диагностика – V636. The expression was implicitly casted from integer type to real type. Consider utilizing an explicit type cast to avoid overflow or loss of a fractional part.
- Новая диагностика – V637. Two opposite conditions were encountered. The second condition is always false.
- Новая диагностика – V638. A terminal null is present inside a string. The '\0xNN' characters were encountered. Probably meant: '\xNN'.
- Новая диагностика – V639. Consider inspecting the expression for function call. It is possible that one of the closing ')' brackets was positioned incorrectly.
- Новая диагностика – V640. Consider inspecting the application's logic. It is possible that several statements should be braced.
- Новая диагностика – V641. The size of the allocated memory buffer is not a multiple of the element size.
- Новая диагностика – V642. Saving the function result inside the 'byte' type variable is inappropriate. The significant bits could be lost breaking the program's logic.
- Новая диагностика – V643. Unusual pointer arithmetic. The value of the 'char' type is being added to the string pointer.
- Новая диагностика – V644. A suspicious function declaration. It is possible that the T type object was meant to be created.
- Новая диагностика – V645. The function call could lead to the buffer overflow. The bounds should not contain the size of the buffer, but a number of characters it can hold.
PVS-Studio 4.71 (20 июля 2012)
- Новая диагностика – V629. Consider inspecting the expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type.
- Новая диагностика – V630. The 'malloc' function is used to allocate memory for an array of objects which are classes containing constructors/destructors.
- Новая диагностика – V631. Consider inspecting the 'Foo' function call. Defining an absolute path to the file or directory is considered a poor style.
- Новая диагностика – V632. Consider inspecting the NN argument of the 'Foo' function. It is odd that the argument is of the 'T' type.
- Новая диагностика – V633. Consider inspecting the expression. Probably the '!=' should be used here.
- Новая диагностика – V634. The priority of the '+' operation is higher than that of the '<<' operation. It's possible that parentheses should be used in the expression.
- Новая диагностика – V635. Consider inspecting the expression. The length should probably be multiplied by the sizeof(wchar_t).
PVS-Studio 4.70 (4 июля 2012)
- Добавлена поддержка Visual Studio 2012 RC. В настоящее время анализатор не полностью поддерживает все синтаксические конструкции, реализованные в Visual C++ 2012. Кроме того есть проблема со скоростью работы анализатора. Для повышения скорости работы мы используем препроцессор из Clang. В настоящее время Clang не полностью разбирает заголовочные файлы Visual C++ 2012. Поэтому в большинстве случаев будет использоваться препроцессор cl.exe из состава Visual C++, который работает существенно медленнее. Для пользователя выбор корректного препроцессора происходит автоматически и об этом не надо как-то специально заботиться. Несмотря на эти ограничения работать с PVS-Studio в Visual Studio 2012 RC уже можно.
- Новая диагностика – V615. An odd explicit conversion from 'float *' type to 'double *' type.
- Новая диагностика – V616. The 'Foo' named constant with the value of 0 is used in the bitwise operation.
- Новая диагностика – V617. Consider inspecting the condition. An argument of the '|' bitwise operation always contains a non-zero value.
- Новая диагностика – V618. It's dangerous to call the 'Foo' function in such a manner, as the line being passed could contain format specification. The example of the safe code: printf("%s", str);.
- Новая диагностика – V619. An array is being utilized as a pointer to single object.
- Новая диагностика – V620. It's unusual that the expression of sizeof(T)*N kind is being summed with the pointer to T type.
- Новая диагностика – V621. Consider inspecting the 'for' operator. It's possible that the loop will be executed incorrectly or won't be executed at all.
- Новая диагностика – V622. Consider inspecting the 'switch' statement. It's possible that the first 'case' operator in missing.
- Новая диагностика – V623. Consider inspecting the '?:' operator. A temporary object is being created and subsequently destroyed.
- Новая диагностика – V624. The constant NN is being utilized. The resulting value could be inaccurate. Consider using the M_NN constant from <math.h>.
- Новая диагностика – V625. Consider inspecting the 'for' operator. Initial and final values of the iterator are the same.
- Новая диагностика – V626. Consider checking for misprints. It's possible that ',' should be replaced by ';'.
- Новая диагностика – V627. Consider inspecting the expression. The argument of sizeof() is the macro which expands to a number.
- Новая диагностика – V628. It's possible that the line was commented out improperly, thus altering the program's operation logics.
- Новая диагностика – V2006. Implicit type conversion from enum type to integer type.
PVS-Studio 4.62 (30 мая 2012)
- Реализована возможность использования препроцессора MinGW gcc для проверки проектов, поддерживающих сборку компиляторами MinGW. При этом интеграция анализатора в сборочную систему подобного проекта аналогична использованию анализатора в других проектах без MSVC .sln-файлов, подробно описанному в документации. Стоит помнить, что при наличии у проекта .sln файлов, проверка из командной строки может быть выполнена и обычным способом, без необходимости прямой интеграции анализатора в сборочную систему.
PVS-Studio 4.61 (22 мая 2012)
- Навигация для сообщений с несколькими номерами строк. Некоторые сообщения (например, V595) относятся к нескольким строкам кода. Раньше в окне PVS-Studio Output Window выдавался в столбце Line только один номер строки, а остальные строки указывались в тексте сообщения. Из-за этого навигация была затруднена. Теперь в поле Line могут выводиться несколько номеров строк, по которым возможно осуществлять навигацию.
- Новая сборка Clang включена в дистрибутив. В PVS-Studio используется Clang в качестве препроцессора. В новой сборке исправлено несколько незначительных ошибок. Обратите внимание, что мы не используем Clang для диагностики ошибок.
- Новая диагностика – V612. An unconditional 'break/continue/return/goto' within a loop.
- Новая диагностика – V613. Strange pointer arithmetic with 'malloc/new'.
- Новая диагностика – V614. Uninitialized variable 'Foo' used.
PVS-Studio 4.60 (18 апреля 2012)
- Новая группа диагностических сообщений "Оптимизация" (OP) предлагает диагностику возможных оптимизаций. Это набор правил статического анализа для выявления участков кода в программах на языке C/C++/C++11, которые можно оптимизировать. Следует понимать, что статический анализатор решает задачи оптимизации в узкой нише микро-оптимизаций. Полный список диагностируемых ситуаций приведен в документации (коды V801-V807).
- Существенно сокращено количество ложных срабатываний в анализаторе 64-битных ошибок (Viva64).
- Теперь игнорируются ошибки в автогенерируемых файлах (MIDL).
- Изменения в логике показа диалога сохранения отчета.
- Исправлена работа на локализованной китайской версии Visual Studio (локаль zh).
- Новая диагностика – V610. Undefined behavior. Check the shift operator.
- Новая диагностика – V611. The memory allocation and deallocation methods are incompatible.
PVS-Studio 4.56 (14 марта 2012)
- Добавлена опция TraceMode в Common Analyzer Settings. Настройка задаёт режим трассировки (протоколирования хода выполнения программы).
- Исправлена ошибка при проверке Itanium-проектов.
- Исправлена проблема вызова 64-битной версии clang.exe вместо 32-битной на 32-битной версии Windows при проверке проекта с выбранной платформой x64.
- Изменено количество используемых при анализе ядер в инкрементальном режиме. Теперь для обычного анализа (Check solution/project/file) используется количество ядер, указанное в настройках. Для инкрементального анализа же используется другое количество ядер: если в настройках больше чем (количество ядер-1) и в системе несколько ядер, то (количество ядер-1); иначе – также как в настройках. Проще говоря, в инкрементальном анализе используется на одно ядро меньше, чтобы такой тип анализа не грузил систему.
- Новая диагностика – V608. Recurring sequence of explicit type casts.
- Новая диагностика – V609. Divide or mod by zero.
PVS-Studio 4.55 (28 февраля 2012)
- Новое окно для продления триал-режима (без необходимости написания письма).
- Исправлено падение при перезагрузке проекта во время работы анализатора кода.
- В инсталляторе (при первой установке на машине) выдается запрос на включение инкрементального анализа в PVS-Studio. Если ранее PVS-Studio на машине уже устанавливалась, то запрос выдан не будет. Включить или выключить инкрементальный анализ можно также с помощью команды "Incremental Analysis after Build" в меню PVS-Studio.
- Количество используемых ядер по умолчанию устанавливается как значение, равное количеству ядер минус один. Это можно изменить с помощью опции ThreadCount в настройках PVS-Studio.
- Новая статья в документации: "Режим инкрементального анализа PVS-Studio".
- Изменения в версии для командной строки – теперь возможна обработка нескольких файлов за один запуск PVS-Studio.exe по аналогии с компилятором (cl.exe file1.cpp file2.cpp). Раньше можно было в командной версии только один файл обрабатывать за раз. Подробнее об использовании версии для командной строки смотрите в документации.
- Возможность проверки проектов Microsoft Visual Studio для ARMv4 архитектуры удалена.
- Новая диагностика V604. It is odd that the number of iterations in the loop equals to the size of the pointer.
- Новая диагностика V605. Consider verifying the expression. An unsigned value is compared to the number – NN.
- Новая диагностика V606. Ownerless token 'Foo'.
- Новая диагностика V607. Ownerless expression 'Foo'.
PVS-Studio 4.54 (1 февраля 2012)
- Новый trial-режим. Теперь ограничиваются только клики. Подробности в блоге и в документации.
- Новая команда меню "Disable Incremental Analysis until IDE restart". Иногда бывает полезно отключить инкрементальный анализ. Например, при редактировании базовых h-файлов, что приводит к перекомпиляции большого количества файлов. Но отключить не навсегда, ведь тогда его можно забыть включить, а временно. Команда также доступна в системном трее во время инкрементального анализа.
- Новая диагностика V602. Consider inspecting this expression. '<' possibly should be replaced with '<<'.
- Новая диагностика V603. The object was created but it is not being used. If you wish to call constructor, 'this->Foo::Foo(....)' should be used.
- Новая диагностика V807. Decreased performance. Consider creating a pointer/reference to avoid using the same expression repeatedly.
- Новая статья в документации: "Команды меню PVS-Studio".
PVS-Studio 4.53 (19 января 2012)
- Новая команда для совместной (групповой) работы над кодом "Add TODO comment for Task List". PVS-Studio позволяет автоматически сгенерировать и внести в код комментарий TODO специального вида, содержащий всю необходимую информацию для оценки и анализа отмеченного им фрагмента программы. Такой комментарий будет сразу отображён в окне Task List в Visual Studio.
- Новая диагностика V599. The virtual destructor is not present, although the 'Foo' class contains virtual functions.
- Новая диагностика V600. Consider inspecting the condition. The 'Foo' pointer is always not equal to NULL.
- Новая диагностика V601. An odd implicit type casting.
PVS-Studio 4.52 (28 декабря 2011)
- Изменения в режиме работы анализатора из командной строки без использования .sln-файла. Теперь анализатор можно запускать в несколько процессов одновременно, выходной файл (--output-file) не будет потерян. Также в параметр --cl-params надо передавать всю строку параметров cl.exe вместе с именем файла: --cl-params $(CFLAGS) $**.
- Исправлена ошибка "Analysis aborted by timeout", появляющаяся при проверке .sln-файла из командной строки через PVS-Studio.exe.
- Новая диагностика V597. The compiler could delete the 'memset' function call, which is used to flush 'Foo' buffer. The RtlSecureZeroMemory() function should be used to erase the private data.
- Новая диагностика V598. The 'memset/memcpy' function is used to nullify/copy the fields of 'Foo' class. Virtual method table will be damaged by this.
PVS-Studio 4.51 (21 декабря 2011)
- Исправлена проблема, связанная с директивой #import при использовании Clang в качестве препроцессора. Clang не поддерживает #import так, как это реализовано в Microsoft Visual C++, поэтому использовать Clang для таких файлов нельзя. Это определяется автоматически и для подобных файлов запускается препроцессор Visual C++.
- Существенно переделана настройка в PVS-Studio исключения из анализа файлов и папок Don't Check Files. Теперь отдельно указываются исключаемые папки (по короткому или полному пути или маске) и отдельно – исключаемые файлы (по имени, расширению или также маске).
- Некоторые библиотеки добавлены в список исключаемых путей по умолчанию. Можно настроить на вкладке Don't Check Files.
PVS-Studio 4.50 (15 декабря 2011)
- Для препроцессирования файлов в PVS-Studio используется внешний препроцессор. Раньше у нас использовался только один препроцессор от Microsoft Visual C++. В PVS-Studio 4.50 появилась поддержка второго препроцессора Clang, который работает существенно быстрее и лишен ряда недостатков препроцессора от Microsoft (хотя и имеет свои недостатки). Тем не менее, в большинстве случаев использование препроцессора Clang позволяет повысить скорость работы в 1.5-1.7 раз. Однако здесь есть нюанс, который надо учитывать. Указать используемый препроцессор можно в настройках PVS-Studio Options -> Common Analyzer Settings -> Preprocessor. Доступны варианты: VisualCPP, Clang и VisualCPPAfterClang. Первые два варианта очевидны, а третий вариант означает, что сначала будет использоваться Clang, в случае если при препроцессировании будут ошибки, то затем файл будет заново препроцессирован с помощью Visual C++. По умолчанию выбрана именно эта опция (VisualCPPAfterClang).
- Анализатор по умолчанию не выдает диагностические сообщения на библиотеки zlib и libpng (это можно отключить).
- Новая диагностика V596. The object was created but it is not being used. The 'throw' keyword could be missing.
PVS-Studio 4.39 (25 ноября 2011)
- Добавлены новые диагностические правила (V594, V595).
- Анализатор по умолчанию не выдает диагностические сообщения на библиотеку Boost (это можно отключить).
- При инкрементальном анализе не выводится диалог прогресса, вместо него в трее показывается иконка, с помощью которой можно сделать паузу или прервать анализ.
- В контекстном меню результатов анализа появилась команда "Don't Check Files and hide all messages from ...". С её помощью можно удалить сообщения и в дальнейшем не проверять файлы из определенной папки. Список исключенных папок можно посмотреть в настройках Don't Check Files.
- Улучшено определение использования Intel C++ Compiler - PVS-Studio не работает с проектами, которые собираются этим компилятором, нужно сменить компилятор на Visual C++.
- Добавлена функция "Quick Filters", позволяющая фильтровать все сообщения, не удовлетворяющие заданным фильтрам.
PVS-Studio 4.38 (12 октября 2011)
- Повышена скорость работы анализатора (примерно на 25% для четырехъядерных машин).
- В контекстное меню окна PVS-Studio добавлена команда перехода по ID ("Navigate to ID").
- Новое окно "Find in PVS-Studio Output" позволяет осуществлять поиск по ключевым словам в результатах анализа.
- Добавлены новые диагностические правила (V2005).
- Кнопка Options переименована в Suppression, и в ней только три вкладки.
PVS-Studio 4.37 (20 сентября 2011)
- Добавлены новые диагностические правила (V008, V2003, V2004).
- Появилась возможность экспортировать результаты анализа в текстовый файл.
- Теперь мы используем расширенный номер сборки в некоторых случаях.
PVS-Studio 4.36 (31 августа 2011)
- Добавлены новые диагностические правила (V588, V589, V590, V591, V592, V593).
PVS-Studio 4.35 (12 августа 2011)
- Добавлены новые диагностические правила (V583, V584, V806, V585, V586, V587).
PVS-Studio 4.34 (29 июля 2011)
- 64-битный анализ по умолчанию отключен.
- Инкрементальный анализ по умолчанию включен.
- Изменения в поведении в ознакомительном режиме.
- Появился предопределенный макрос PVS_STUDIO.
- Исправлена проблема с инкрементальным анализом на локализованных версиях Visual Studio.
- Всплывающие уведомления и иконка в трее добавлены (по завершении анализа).
- Добавлены новые диагностические правила (V582).
- Изменена картинка для показа с левой стороны мастера установки в дистрибутиве.
PVS-Studio 4.33 (21 июля 2011)
- Режим работы "Incremental Analysis" теперь доступен во всех версиях Microsoft Visual Studio (2005/2008/2010), а не только в VS2010.
- Повышена скорость работы анализатора (примерно на 20% для четырехъядерных машин).
- Добавлены новые диагностические правила (V127, V579, V580, V581).
PVS-Studio 4.32 (15 июля 2011)
- Изменения в лицензионной политике PVS-Studio.
- Реализована динамическая балансировка загрузки процессора.
- Кнопка останова анализа работает быстрее.
PVS-Studio 4.31 (6 июля 2011)
- Исправлена проблема взаимодействия с некоторыми плагинами, включая Visual Assist.
- Добавлены новые диагностические правила (V577, V578, V805).
PVS-Studio 4.30 (23 июня 2011)
- Появилась полноценная поддержка работы анализатора из командной строки. Можно проверять отдельные файлы или группы файлов, вызывая анализатор из Makefile. При этом сообщения анализатора можно видеть не только на экране (для каждого файла), но и записать в один файл, который в дальнейшем можно открыть в Visual Studio и уже получить полноценную работу с результатами анализа: настройки кодов ошибок, фильтры сообщений, навигация по коду, сортировка и т.п. Подробнее.
- Новый важный режим работы Incremental Analysis. PVS-Studio теперь может автоматически запускать анализ измененных файлов, которые надо пересобрать с помощью команды Build в Visual Studio. Теперь все разработчики команды могут сразу же видеть проблемы в новом только что написанном коде без необходимости явно запускать проверку кода – это происходит автоматически. Incremental Analysis работает подобно IntelliSense в Visual Studio. Возможность доступна только в Visual Studio 2010. Подробнее.
- Добавлена команда "Check Selected Item(s)".
- Изменения в запуске команды "Check Solution" при старте из командной строки. Подробнее.
- Добавлены новые диагностические правила (V576).
PVS-Studio 4.21 (20 мая 2011)
- Добавлены новые диагностические правила (V220, V573, V574, V575).
- Добавлена поддержка TFS 2005/2008/2010.
PVS-Studio 4.20 (29 апреля 2011)
- Добавлены новые диагностические правила (V571, V572).
- Добавлена экспериментальная поддержка архитектур ARMV4/ARMV4I для Visual Studio 2005/2008 (Windows Mobile 5/6, PocketPC 2003, Smartphone 2003).
- Новая опция "Show License Expired Message".
PVS-Studio 4.17 (15 апреля 2011)
- Добавлены новые диагностические правила (V007, V570, V804).
- Исправлено неправильное отображение времени анализа файлов при некоторых настройках локали.
- Новая опция "Analysis Timeout". Данная настройка позволяет задать лимит времени, по истечении которого анализ отдельных файлов завершается с ошибкой V006, или совсем отключить прерывание анализа по лимиту времени.
- Новая опция " Save File After False Alarm Mark". Сохранять или нет файл каждый раз после пометки как False Alarm.
- Новая опция " Use Solution Folder As Initial". Определяет папку, которая открывается при сохранении файла с результатами анализа.
PVS-Studio 4.16 (1 апреля 2011)
- При запуске инструмента из командной строки теперь можно задать список файлов, которые будут проверяться. Это можно использовать для проверки, к примеру, только тех файлов, которые были обновлены в системе контроля версий. Подробнее.
- В настройки инструмента добавлена опция "Check only Files Modified In". Данное поле позволяет задать временной интервал, для которого будет осуществляться проверка наличия изменений в анализируемых файлах с использованием файлового атрибута "Date Modified". Другими словами, такой подход позволит проверять "все файлы, которые были изменены за последний день". Подробнее.
PVS-Studio 4.15 (17 марта 2011)
- Значительно уменьшено количество ложных срабатываний для 64-битного анализа.
- Изменения в интерфейсе задания безопасных типов (safe-types).
- Исправлена ошибка с обработкой stdafx.h в некоторых особых случаях.
- Улучшена работа с файлом отчета.
- Улучшен диалог прогресса: показывается затраченное время и сколько осталось.
PVS-Studio 4.14 (2 марта 2011)
- Значительно уменьшено количество ложных срабатываний для 64-битного анализа.
- Добавлены новые диагностические правила (V566, V567, V568, V569, V803).
- В окне сообщений PVS-Studio появилась новая колонка "Звездочка". Теперь вы можете отметить интересные диагностики звездочкой для того, чтобы в дальнейшем обсудить их с коллегами. Пометки сохраняются в файл отчета.
- Опции PVS-Studio теперь доступны не только из меню (в обычном диалоге настроек), но и в окне PVS-Studio. Благодаря этому настройка инструмента теперь делается быстрее и удобнее.
- Добавлена возможность сохранять и восстанавливать настройки PVS-Studio. Это позволяет переносить настройки между различными компьютерами и рабочими местами. Также появилась команда "Восстановить настройки по умолчанию".
- Добавлено сохранение статус кнопок окна PVS-Studio (включено/выключено) при следующем запуске Microsoft Visual Studio.
PVS-Studio 4.13 (11 февраля 2011)
- Добавлены новые диагностические правила (V563, V564, V565).
- Команда "Check for updates" добавлена в меню PVS-Studio.
- Команда "Hide all VXXX errors" для выключения ошибок по их коду добавлена в контекстное меню окна PVS-Studio. Если вы хотите включить обратно показ диагностик VXXX вы можете сделать это через страницу настроек PVS-Studio->Options->Detectable errors.
- Подавление ложных предупреждений в макросах (#define) добавлено.
PVS-Studio 4.12 (7 февраля 2011)
- Добавлены новые диагностические правила (V006, V204, V205, V559, V560, V561, V562).
- Изменения в диагностических правилах V201 и V202.
PVS-Studio 4.11 (28 января 2011)
- Диагностическое правило V401 заменено на V802.
- Исправлена проблема с копированием сообщений в буфер обмена.
PVS-Studio 4.10 (17 января 2011)
- Добавлены новые диагностические правила (V558).
PVS-Studio 4.00 (24 декабря 2010)
- Добавлены новые диагностические правила (V546-V557).
- Исправлена проблема с обработкой property sheets в Visual Studio 2010.
- Исправлена ошибка с обходом дерева проектов.
- В окно PVS-Studio добавлено поле "Project" - проект, к которому относится диагностическое сообщение.
- Исправлена установка PVS-Studio для Visual Studio 2010 – теперь PVS-Studio устанавливается для всех пользователей, а не только для текущего.
- Исправлено падение при попытке сохранить пустой файл отчета.
- Исправлена проблема с отсутствующим файлом safe_types.txt.
- Исправлена ошибка, возникающая при попытке проверить файлы, которые включены в проект, но реально на диске не существуют (например, это автогенерируемые файлы).
- Добавлена индикация процесса обработки дерева проекта.
- Файл с результатами анализа PVS-Studio (расширение .plog) теперь загружается по двойному клику.
- Изменения в лицензионной политике.
PVS-Studio 4.00 BETA (24 ноября 2010)
- Новый набор правил статического анализа общего назначения (V501-V545, V801).
- Добавлены новые правила (V124-V126).
- Изменения в лицензионной политике.
- Новое окно для диагностических сообщений, выдаваемых анализатором.
- Повышение скорости работы.
PVS-Studio 3.64 (28 сентября 2010)
- Существенное обновление документации по PVS-Studio, добавлены новые разделы.
PVS-Studio 3.63 (10 сентября 2010)
- Исправлена проблема, иногда возникающая при анализе файлов с не системного диска.
- Исправлена проблема с вычислением значений макросов для отдельных файлов (а не всего проекта).
- Команда "What Is It?" удалена.
- Демонстрационные примеры проблем 64-битного кода (PortSample) и параллельного кода (ParallelSample) объединены в единый пример OmniSample, который подробно описан в документации.
- Исправлено падение при наличии в решении выгруженного (unloaded) проекта.
PVS-Studio 3.62 (16 августа 2010)
- Добавлено новое правило V123: Allocation of memory by the pattern "(X*)malloc(sizeof(Y))" where the sizes of X and Y types are not equal.
- Упрощена работа с PVS-Studio из командной строки (без файла проекта Visual Studio).
- По умолчанию не выдаются сообщения об ошибках в tli/tlh файлах.
PVS-Studio 3.61 (22 июля 2010)
- Исправлено падение в VS2010 при выставленном параметре EnableAllWarnings в настройках проекта.
- Исправлена ошибка – проверялись даже те проекты, которые были исключены из сборки в Configuration Manager.
- Улучшен анализ кода.
PVS-Studio 3.60 (10 июня 2010)
- Добавлено новое правило V122: Memsize type is used in the struct/class.
- Добавлено новое правило V303: The function is deprecated in the Win64 system. It is safer to use the NewFOO function.
- Добавлено новое правило V2001: Consider using the extended version of the FOO function here.
- Добавлено новое правило V2002: Consider using the 'Ptr' version of the FOO function here.
PVS-Studio 3.53 (7 мая 2010)
- Добавлена возможность задать вопрос разработчикам PVS-Studio про сообщения, выдаваемые анализатором кода (команда "What Is It").
- Значительно улучшен анализ кода, связанного с использованием неименованных структур.
- Исправлена ошибка, приводившая в некоторых случаях к неверному вычислению размера структур.
PVS-Studio 3.52 (27 апреля 2010)
- Добавлена новая online справочная система. Старая справочная система интегрировалась в MSDN. По некоторым причинам это неудобно (как пользователям, так и разработчикам). Теперь PVS-Studio будет открывать справку на нашем сайте. От интеграции с MSDN мы отказались. И, как и прежде, доступна pdf-версия документации.
- Отказались от поддержки Windows 2000.
- Удалена страница настроек "Exclude From Analysis" - вместо нее страница "Don't Check Files".
- Улучшена работа в Visual Studio 2010.
- Исправлена проблема с интеграцией в VS2010 при повторной инсталляции.
- Исправлена работа функции "Mark As False Alarm" с read-only файлами.
PVS-Studio 3.51 (16 апреля 2010)
- PVS-Studio поддерживает работу в Visual Studio 2010 RTM.
- Добавлено новое правило V003: Unrecognized error found...
- Добавлено новое правило V121: Implicit conversion of the type of 'new' operator's argument to size_t type.
- Добавлена возможность исключить из анализа файлы по маске (PVS-Studio Options, вкладка Don't Check Files).
- Переделан интерфейс страницы настроек Exclude From Analysis.
- Убрана опция MoreThan2Gb из страницы настроек Viva64 (опция устарела и более не имеет смысла).
- При проверке кода из командной строки надо указывать тип анализатора (Viva64 или VivaMP).
- Снижен приоритет процесса анализатора, что позволяет комфортно работать на машине во время проверки кода.
PVS-Studio 3.50 (26 марта 2010)
- PVS-Studio поддерживает работу в Visual Studio 2010 RC. Хотя официальный выпуск Visual Studio еще не состоялся, мы уже добавили поддержку этой среды в анализатор. Сейчас PVS-Studio интегрируется в Visual Studio 2010 и может проверять проекты в этой среде. В Visual Studio 2010 изменена справочная система, поэтому пока справка от PVS-Studio не интегрируется в документацию, как это делается в Visual Studio 2005/2008. Но вы по-прежнему можете пользоваться online-справкой. Поддержка Visual Studio 2010 RC реализована не полностью.
- Доступна PDF-версия справочной системы. Теперь в дистрибутиве с PVS-Studio идет 50-страничный PDF-документ. Это полная копия нашей справочной системы (которая интегрируется в MSDN в Visual Studio 2005/2008 или доступна online).
- В PVS-Studio появился механизм автоматического определения новых версий инструмента на нашем сайте. Определение новых версий контролируется через опцию CheckForNewVersions вкладки настроек "Common Analyzer Settings". В случае если опция CheckForNewVersions имеет значения True, то при запуске проверки кода (команды Check Current File, Check Current Project, Check Solution меню PVS-Studio) выполняется загрузка специального текстового файла с сайта pvs-studio.com. В этом файле прописан номер самой последней версии PVS-Studio, доступной на сайте. Если версия на сайте окажется новее, чем версия, установленная у пользователя, то пользователь увидит запрос на обновление. В случае разрешения этого обновления запустится специальное отдельное приложение PVS-Studio-Updater, которое автоматически загрузит новый дистрибутив PVS-Studio с сайта и запустит его установку. В случае если опция CheckForNewVersions установлена в False, то проверка новой версии производиться не будет.
- Реализована поддержка стандарта C++0x на уровне, на котором она осуществлена в Visual Studio 2010. Реализована поддержка лямбда-выражений, auto, decltype, static_assert, nullptr и так далее. В дальнейшем, с развитием поддержки C++0x в Visual C++, анализатор PVS-Studio также будет поддерживать новые возможности языка Си++.
- Стало возможно запускать проверку проектов с помощью PVS-Studio не из Visual Studio, а с помощью командой строки. Обратите внимание, что речь идет все равно о проверке из Visual Studio с использованием файлов проектов (.vcproj) и решений (.sln), но при этом запуск анализа будет осуществляться не из IDE, а из командной строки. Такой вариант запуска удобен для регулярной проверки кода с помощью систем сборки (build system) или систем непрерывной интеграции (continuous integration system).
- Добавлено новое правило V1212: Data race risk. When accessing the array 'foo' in a parallel loop, different indexes are used for writing and reading.
- В этой версии инструмента мы ввели сертификат подписи кода. Это позволит пользователям быть уверенным в подлинности дистрибутива и получать меньше сообщений от операционной системы при установке приложения.
PVS-Studio 3.45 (1 февраля 2010)
- Существенно улучшена работа анализатора с шаблонами.
- Улучшена работа на многоядерных системах.
PVS-Studio 3.44 (21 января 2010)
- Частичная поддержка проверки кода для процессоров Itanium. Теперь код, который собирается в Visual Studio Team System для процессоров Itanium также можно проверять с помощью анализатора. Анализ выполняется на системах x86 и x64, запуск на Itanium пока не реализован.
- Сокращение количества ложных срабатываний анализатора при анализе доступа к массивам. Теперь анализатор в ряде случаев "понимает" диапазоны значений в цикле for и не выводит лишних сообщений про доступе к массивам с помощью таких индексов. Например: for (int i = 0; i < 8; i++) arr[i] = foo(); // нет сообщения анализатора.
- Сокращенено количество ложных сообщений анализатора - введен список типов данных, которые не образуют большие массивы. Например, HWND, CButton. Пользователь может составлять свои списки типов.
- Исправлена ошибка в работе инсталятора при установке программы в папку, отличную от папки по умолчанию.
PVS-Studio 3.43 (28 декабря 2009)
- Удалена опция ShowAllErrorsInString (теперь она всегда имеет значение true).
- Новое правило V120: Member operator[] of object 'foo' declared with 32-bit type argument, but called with memsize type argument.
- Новое правило V302: Member operator[] of 'foo' class has a 32-bit type argument. Use memsize-type here.
- Улучшен анализ operator[].
- Исправлена ошибка с долгим удалением программы при многократной установке "поверх".
- Исправлена ошибка анализа файлов с символом "^" в имени.
PVS-Studio 3.42 (9 декабря 2009)
- Улучшена диагностика ошибок с магическими числами. Теперь в сообщении о проблеме выдается больше информации, что позволяет более гибко использовать фильтры.
- Исправлена ошибка при работе с прекомпилированными заголовочными файлами специального типа.
- Опция DoTemplateInstantiate (выполнять инстанцирования шаблонов) теперь по умолчанию включена.
- Исправлена ошибка с зависанием препроцессора при большом количестве сообщений препроцессора.
- Улучшен анализ operator[].
PVS-Studio 3.41 (30 ноября 2009)
- Исправлена ошибка анализа файлов с одинаковыми именами при работе на многоядерной машине.
- Исправлена ошибка некорректной диагностики некоторых типов cast-выражений.
- Существенно улучшен разбор перегруженных функций в анализаторе.
- Добавлена диагностика некорректного использования time_t типа.
- Добавлена обработка специальных параметров в настройках файлов проекта Visual C++.
PVS-Studio 3.40 (23 ноября 2009)
- Добавлена возможность "Mark as False Alarm". Благодаря этому возможно пометить в исходном коде те строки, в которых происходит ложное срабатывание анализатора кода. После разметки, анализатор более не будет выдавать диагностических сообщений на такой код. Это позволяет более удобно постоянно использовать анализатор в процессе разработки программного обеспечения для проверки нового кода.
- Добавлена поддержка Project Property Sheets - механизма удобной настройки проектов Visual Studio.
- При проверке параллельных программ анализатор может выполнять два прохода по коду, что позволяет собрать больше информации и выполнить более точную диагностику некоторых ошибок.
PVS-Studio 3.30 (25 сентября 2009)
- В PVS-Studio добавлена возможность проверки 32-битных проектов для оценки сложности и стоимости миграции кода на 64-битные системы.
- Добавлено новое правило для анализа 64-битного кода V118: malloc() function accepts a dangerous expression in the capacity of an argument.
- Добавлено новое правило для анализа 64-битного кода V119: More than one sizeof() operators are used in one expression.
- Добавлено новое правило для анализа параллельного кода V1211: The use of 'flush' directive has no sense for private '%1%' variable, and can reduce performance.
- Улучшена совместная работа с Intel C++ Compiler (исправлено падение при попытке проверки кода с установленным Intel C++ Compiler).
- Улучшена поддержка локализованных версий Visual Studio.
PVS-Studio 3.20 (7 сентября 2009)
- Исправлена ошибка с некорректным выводом некоторых сообщений в локализованных версиях Visual Studio.
- Улучшена загрузка log-файла.
- Улучшена обработка критических ошибок - теперь о возможных проблемах с инструментов сообщить нам стало просто.
- Улучшена работа инсталлятора.
- Исправлена ошибка перебора файлов проекта.
PVS-Studio 3.10 (10 августа 2009)
- Добавлена поддержка инстанцирования шаблонов. Теперь поиск потенциальных ошибок выполняется не просто по телу шаблонов (как ранее), но и еще выполняется подстановка аргументов шаблона для более тщательной диагностики.
- Теперь анализатор кода может работать в режиме имитации Linux-окружения. Мы добавили поддержку различных моделей данных. Поэтому теперь на Windows-системе можно проверять кросс-платформенные программы также, как это делалось бы на Linux-системе.
- Исправлена ошибка, связанная с некорректной работой анализатора параллельных ошибок в 32-битном окружении.
- Существенно улучшена работа анализатора с шаблонами.
PVS-Studio 3.00 (27 июля 2009)
- Программные продукты Viva64 и VivaMP объединены в один программный комплекс PVS-Studio.
- Новая версия представляет собой существенно модернизированный программный продукт.
- Существенно повышена стабильность работы модуля интеграции в Visual Studio.
- Повышена скорость работы на многопроцессорных системах: анализ выполняется в несколько потоков. Причем количество рабочих потоков анализатора можно настраивать с помощью опции "Thread Count". По умолчанию количество потоков соответствует количеству ядер в процессоре, однако количество потоков можно уменьшить.
- Добавлена возможность работы анализатора из командной строки. В настройки программы добавлена новая опция "Remove Intermediate Files" ("Удалять промежуточные файлы"), которая позволяет не удалять командные файлы, создаваемые во время работы анализатора кода. Эти командные файлы можно запускать отдельно, без Visual Studio для выполнения анализа. Кроме того, создавая новые командные файлы по аналогии можно выполнять анализ всего проекта без использования Visual Studio.
- Управлять диагностикой отдельных ошибок стало проще, удобнее и быстрее. Теперь можно включать и выключать показ отдельных ошибок в результатах анализа. Самое главное, что изменение списка сообщений происходит автоматически, без необходимости перезапуска анализа. Выполнив анализ, вы можете просмотреть список ошибок и просто выключить показ тех из них, которые для вашего проекта не актуальны.
- Значительно улучшена работа с фильтрами ошибок. Фильтры для сокрытия отдельных сообщений теперь задаются просто как список строк. Причем применение фильтров также как и управление диагностикой отдельных ошибок не требует перезапуска анализа.
- Изменение лицензионной политики. Хотя PVS-Studio является единым продуктом, лицензирование возможно и для отдельных модулей анализа, таких как Viva64 и VivaMP, и для всех модулей сразу. Кроме того, появились лицензии для одного пользователя и для команды разработчиков. Все эти изменения нашли отражение в регистрационных ключах.
- Поддержка локализованных версий Visual Studio существенно улучшена.
- Интегрирующаяся в MSDN справочная система для новой версии PVS-Studio была значительно переработана и усовершенствована. Описание новых разделов позволяет лучше изучить работу с программным продуктом.
- Улучшено графическое оформление программного продукта. Новые иконки и графика в инсталляторе придали анализатору более красивый вид.
VivaMP 1.10 (20 апреля 2009)
- Улучшен анализ кода, содержащего вызовы статических функций класса.
- Реализованы новые диагностические правила для анализа ошибок связанных с исключениями: V1301, V1302, V1303.
- Исправлена ошибка с некорректным отображением индикатора прогресса анализа на компьютерах с нестандартным DPI.
- Реализованы некоторые другие усовершенствования.
VivaMP 1.00 (10 марта 2009)
- Выпущена финальная версия VivaMP.
VivaMP 1.00 beta (27 ноября 2008)
- Первая публичная бета-версия VivaMP выложена в Интернете.
Viva64 2.30 (20 апреля 2009)
- Реализовано новое диагностическое правило V401.
- Улучшена обработка констант, что в ряде случаев сокращает количество ложных диагностических предупреждений.
- Исправлена ошибка с некорректным отображением индикатора прогресса анализа на компьютерах с нестандартным DPI.
- Исправлен ряд недочетов.
Viva64 2.22 (10 марта 2009)
- Улучшена совместная работа Viva64 и VivaMP.
- Увеличена скорость работы анализатора кода на 10%.
Viva64 2.21 (27 ноября 2008)
- Добавлена поддержка совместной работы Viva64 и VivaMP.
Viva64 2.20 (15 октября 2008)
- Улучшена диагностика потенциально опасных конструкций. В результате примерно на 20% сократилось количество "ложных срабатываний" анализатора кода. Теперь разработчик потратит меньше времени на анализ кода, диагностируемого как потенциально опасный.
- Изменения в справочной системе. Справка было расширена и дополнена новыми примерами. Так как в данной версии улучшена диагностика потенциально опасных конструкций, то в справочную систему также были добавлены пояснения, касающиеся того, какие конструкции теперь не считаются опасными.
- Увеличена скорость анализа структуры проекта. Теперь же такая работа выполняется примерно в 10 раз быстрее. В конечном итоге это сокращает общее время анализа всего проекта.
- Улучшен анализ шаблонов в языке Си++. Не секрет, что далеко не все анализаторы кода полностью понимают шаблоны (template). Мы постоянно работаем над улучшением диагностики потенциально опасных конструкций в шаблонах. Очередное подобное улучшение сделано в этой версии.
- Изменен формат ряда сообщений анализатора кода для возможности осуществления более тонкой настройки фильтров. Так, например, теперь анализатор не просто сообщает о некорректном типе индекса при доступе к массиву, но при этом и указывает имя самого массива. Если разработчик уверен, что подобный массив никак не может быть источником проблем для 64-битного режима работы, то он может отфильтровать все сообщения, относящиеся к данному массиву по его имени.
Viva64 2.10 (05 сентября 2008)
- Добавлена поддержка Visual C++ 2008 Service Pack 1.
Viva64 2.0 (09 июля 2008)
- Добавлена поддержка Visual C++ 2008 Feature Pack (и TR1).
- Добавлен режим Pedantic, позволяющий в случае необходимости находить конструкции, представляющие потенциальную опасность, но редко приводящие к ошибкам.
- Улучшена диагностика шаблонных функций.
Viva64 1.80 (03 февраля 2008)
- Visual Studio 2008 полностью поддерживается.
- Увеличена скорость анализа кода.
- Улучшен установщик. Теперь возможно установить Viva64 без прав администратора.
Viva64 1.70 (20 декабря 2007)
- Добавлена поддержка нового диагностического сообщения (V117). Memsize type used in union.
- Исправлена серьезная проблема связанная с диагностикой нескольких ошибок в одной строке кода.
- Исправлена ошибка вычисления типов в сложных синтаксических конструкциях.
- Улучшен интерфейс пользователя. Индикатор прогресса отслеживает анализ всего решения (solution).
- Visual Studio 2008 частично поддерживается(BETA).
Viva64 1.60 (28 августа 2007)
- Добавлена поддержка нового диагностического сообщения (V112). Dangerous magic number used.
- Добавлена поддержка нового диагностического сообщения (V115). Memsize type used for throw.
- Добавлена поддержка нового диагностического сообщения (V116). Memsize type used for catch.
- Изменены ограничения ознакомительной версии. Для каждого анализируемого файла показываются только несколько диагностических сообщений.
Viva64 1.50 (15 мая 2007)
- Добавлена поддежка анализа кода на языке Си.
Viva64 (1.40 - 1 мая 2007)
- Добавлена возможность подавления некоторых сообщений. Вы можете задавать свои фильтры на странице настроек "Message Suppression". Например, вы можете захотеть пропускать сообщения с определенным кодом ошибки или сообщения, содержащие определенные имена функций. (См. Settings: Message Suppression).
- Появилась возможность сохранять/загружать результаты анализа..
- Улучшено представление результатов работы анализатора. Результаты теперь выдаются в стандартном окне Visual Studio под названием Error List, подобно сообщениям компилятора.
Viva64 1.30 (17 марта 2007)
- Улучшено представление процесса анализа кода. Убраны лишние переключения окон, создан общий индикатор прогресса.
- Добавлена панель инструментов Viva64.
- Пользователь может указать анализатору, что проверяемая программа может использовать более 2Гб оперативной памяти. Для программ, использующих меньше 2Гб памяти некоторые диагностические сообщения будут отключены.
- Добавлена поддержка нового диагностического сообщения (V113). Implicit type conversion from memsize to double type or vice versa.
- Добавлена поддержка нового диагностического сообщения (V114). Dangerous explicit type pointer conversion.
- Добавлена поддержка нового диагностического сообщения (V203). Explicit type conversion from memsize to double type or vice versa.
Viva64 1.20 (26 января 2007)
- Добавлена фильтрация повторяющихся сообщений. Речь идет об ошибках в h-файлах. Ранее если *.h файл с ошибкой включался в различные *.cpp файлы, то диагностические сообщения выдавались несколько раз. Теперь же будет только одно диагностическое сообщение.
- Теперь Viva64 сообщает о количестве ошибок, обнаруженных после анализа кода. Вы всегда можете определить: - сколько кода осталось проверить; - как много ошибок уже исправлено; - какие модули содержат наибольшее количество ошибок.
- Добавлена поддержка горячих клавиш. Теперь можно прервать работу анализатора с помощью Ctrl+Break. А для проверки текущего файла достаточно нажать Ctrl+Shift+F7.
- Исправлены некоторые ошибки в работе анализатора.
Viva64 1.10 (16 января 2007)
- С помощью анализатора Viva64 мы подготовили 64-битную версию Viva64! Но пользователю не надо беспокоиться о выборе подходящей версии. Правильная версия выбирается автоматически во время установки.
- Добавлена поддержка нового диагностического сообщения (V111).
- Удалена ненужная диагностика на доступ к массивам с помощью enum-значений.
- Удалена ненужная диагностика ошибок на конструкции вида int a = sizeof(int).
- Улучшения справочной системы.
Viva64 1.00 (31 декабря 2006)
- Первая публичная версия Viva64 выложена в Интернете.