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

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

PVS-Studio corporate blog Programming *C++ *C *

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!
Tags:
Hubs:
Total votes 62: ↑51 and ↓11 +40
Views 15K
Comments Comments 64

Information

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