PVS-Studio corporate blog
Programming
C++
C
16 October 2017

Любите статический анализ кода

PVS-Studio - супергерой

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.

Работа с инструментами статического анализа кода требует внимательности. Очень часто код, на который указал анализатор, кажется корректным. Сразу хочется посчитать предупреждение ложным срабатыванием и пойти дальше. Даже я, один из разработчиков PVS-Studio, попадаю в эту ловушку и не вижу ошибку. На днях я открыл 2 тикета в нашем багтрекере, касающиеся диагностики V614, которая ищет использование неинициализированных переменных и массивов.

В обоих случаях я подумал, что анализатор неправ и в нём надо что-то исправить. Первый случай:

Код, опечатка


Я четыре раза прочитал этот код, но так и не увидел ошибку. И решил, что это ложное срабатывание, которое надо править. Но прав анализатор, а я просто невнимательный человек.

Буфер caption остаётся неинициализированным. Посмотрите выше, там обе строки загружаются в буфер text. Опечатка. Я не смог её увидеть.

А вот еще более эпичный случай:

на первый взгляд всё хорошо


Анализатор PVS-Studio говорит, что используется неинициализированный буфер buf. Бред какой-то. И я отписываю этот случай в багтрекере как баг, который надо обязательно поправить. Ведь очевидно, что функция sprintf инициализирует буфер и всё в этом коде хорошо.

Нифига! Вновь прав анализатор PVS-Studio, а не я. Тот случай, когда творение превзошло создателя. :)

Очень нехороший программист в одном из заголовочных файлов написал вот это:

эпичный #define


Видите, sprinf раскрывается в std::printf. Да, да, в этой программе sprintf это тоже самое что printf.

Ужас то какой. Получается, что функция printf использует неинициализированный буфер buf как управляющую строку.

Любите и используйте статические анализаторы кода! Они сэкономят вам нервы и время.


Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Appreciate Static Code Analysis!

+40
13k 26
Comments 64