В конце прошлого года Бен Портер спросил в Твиттере, может ли компилятор найти неправильное использование итераторов в этом коде:
std::vector<int> to_vector(int value) { std::vector<int> a, b; a.insert(b.end(), value); return a; }
Джейсон Тернер (ведущий CppCast) тогда ответил и предложил, что это может сделать анализатор PVS-Studio: Я не могу тестировать сразу, но думаю, что PVS-Studio умеет ловить такие ошибки «@Code_Analysis. Я знаю, что некоторые инструменты статического анализа могут, так что это должно быть понятно».
Получив уведомление, я ознакомился с вопросом и хотел убедиться, что анализатор PVS-Studio действительно может найти такие ошибки с помощью диагностики V539. Ну, хотел, но не смог :(. Оказывается, это как раз тот случай, когда анализатор не может определить, о чем и пришлось написать.
Однако я не отказался от этой идеи. Мы завершили диагностику V539. Сегодня у нас очередной релиз PVS-Studio, который содержит следующее сообщение. Он будет выдан для приведенного выше кода:
V539 [CWE-688] Рассмотрите возможность проверки итераторов, которые передаются в качестве аргументов функции «вставка». test.cpp 43
Ура! Спасибо всем. Мы очень рады собирать шаблоны ошибок, которые мы до сих пор не можем диагностировать, и благодарны всем, кто присылает их нам. Так что, если что, напишите мне или в нашу поддержку.
Помимо описанного улучшения, в релизе PVS-Studio 7.06 были добавлены следующие возможности:
- 20 новых диагностик;
- PVS-Studio теперь можно использовать вместе с кроссплатформенной IDE для разработки встраиваемых систем PlatformIO;
- Анализатор C# PVS-Studio теперь понимает проверки Unity-указанных переменных на null через их неявное приведение к типу bool;
- "читать далее".
Вы можете скачать и попробовать новую версию анализатора PVS-Studio. Используйте промокод #pvs706, чтобы получить лицензионный ключ на месяц вместо недели. Просто введите #pvs706 в поле сообщение при запросе пробного ключа на странице загрузки.