Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Большое количество ошибок программистами допускается просто по невнимательности или из-за спешки. Хорошо это видно на небольших неправильных изменениях, вносимых в код. Рассмотрим как раз такой случай, когда, исправляя одну ошибку, программист добавляет новую.
Собственно, всё уже видно на приведённой картинке. В принципе, дальше можно и не читать :). Но рассказать, что к чему, мне всё равно хочется, и я это сделаю.
Ещё в том году я начал мониторить с помощью анализатора PVS-Studio открытый проект Blender. Но как выяснилось, я оказался достаточно ленив в этом деле. Проект активно развивается, и мне на почту постоянно приходят уведомления про предупреждения, относящиеся к новому коду. А у меня то совещание, то написание какой-то статьи, то ещё что-то. Получалось, что обычно я вообще пропускал эти уведомления :(. Как результат, за тот год я написал всего пару заметок про свежие ошибки, хотя можно было бы написать намного больше.
Вчера смотрю, пришло письмо с двумя предупреждениями. Ну ладно, думаю, дай посмотрю, пока минутка есть. Одно предупреждение не очень интересное, зато второе – прямо конфетка. Ну что же, надо побороть лень и описать, как PVS-Studio может помогать выявлять ошибки при регулярном использовании :).
Итак, @Antonioya сделал коммит из двух строчек, чтобы исправить баг: Fix T94903: GPencil: Copying keys doesn't preserve Keyframe Type.
Он поспешил и не заметил, что указатель может быть нулевым. Об этом свидетельствует проверка указателя на равенство nullptr:
gpf->key_type = gpfs->key_type;
if (gpf) {
В свою очередь анализатор PVS-Studio заметил аномалию и выдал предупреждение: V595 [CWE-476]: The 'gpf' pointer was utilized before it was verified against nullptr. Check lines: 458, 459. editaction_gpencil.c
Вот так сразу можно заметить многие ляпы и сократить время на их исправление. Намного проще найти и исправить ошибку самому программисту, чем возвращаться к этому коду, когда баг выявят тестировщики или пользователи.
P.S. Хотел вначале назвать статью просто "Как PVS-Studio защищает от поспешных правок кода", но оказывается, такая статья уже есть и пришлось приписать "пример N2". Думаю, со временем количество таких статей будет увеличиваться. Спасибо за внимание, и попробуйте внедрить PVS-Studio в свой процесс разработки.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. How PVS-Studio prevents rash code changes, example N2.