Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 26

Проблема проста — не используют возвращаемое логическое значение метода empty, указывающее, пуст ли контейнер. Судя по тому, что в приведённом выражении кроме вызова метода ничего нет, можно предположить, что разработчик хотел очистить контейнер, но ошибся, вызвав метод empty вместо clear.


Проблемы не возникло бы, если бы метод назывался is_empty.
Автор оригинальной статьи про проверку X-Ray Engine тоже обратил на это внимание :)
Особенно «весело» при использовании MFC и STL в одном проекте. У той же CString::Empty() — очистка строки.
и уж наверняка бы её не возникло, называйся метод get_container_size_is_equal_to_zero(); (сарказм)
НЛО прилетело и опубликовало эту надпись здесь
При этом все ошибки фиксятся на кодревью
Ха-ха. :) 13645 ошибок найденных нами в открытых проектах.
НЛО прилетело и опубликовало эту надпись здесь
Мы много общаемся с руководителями разработок разных компаний на тему контроля качества кода. Так вот, в общем случае, кодревью служит только для проверки логики работы внесённых изменений в код, немножко code style и практически ничего (из серии «случайно бросилось в глаза») по ляпам разного характера.
Вообще предупреждение на первое место хорошо бы изменить: у разработчика возникнет ощущение, что ваш анализатор просто ошибся. Без вашего детального разъяснения понять где ошибка реально тяжело.
НЛО прилетело и опубликовало эту надпись здесь

Эх, чем больше смотрю на эти перечни "тупых" или "непреднамеренных" ошибок типа копипаста и т.п., тем больше задаюсь вопросом, сколько же тогда ошибок кроется в рантайме (когда код по задумке разработчика написан верно, так, как он и хотел, но сама логика программы при этом не верна)
Если программа работает, это не значит, что в ней нет ошибок.
Если в программе нет ошибок, это не значит, что она работает правильно.

И хотя я понимаю, что авторы этой статьи не смогут реализовать это, но помечтать вслух не запрещено ведь?
Круто было бы, если бы возле каждой проверки был описан результат-баг в реальном продукте. К примеру, вызвал empty вместо clear — массив не очистился, потом метод Х использовал этот массив, вернул неправильные данные методу В и тот сохранил пустой файл вместо файла с данными.
Это делать можно, но это очень трудоёмко. По крайней мере регулярно писать подобные статьи мы не осилим.
Какой только фигни в коде не напишешь когда руководитель департамента теребит каждые полчаса «где релиз, когда релиз» а программистов по пальцам одной руки пересчитать можно
31 программист это не так уж мало /s
Каждый раз, как читаю о PVS возникает желание вернуться на C++. Автоматический поиск багов вызывает чувство уюта.: )
Нет ли в планах JS? Неиспользуемые параметры метода или ошибки в логических условиях выглядят реализуемо для динамического языка.
JS — нет. В планах Java.
В Chromium недавно всплыл интересный баг, который, похоже, вполне мог быть отловлен статическим анализом:
https://bugs.chromium.org/p/chromium/issues/detail?id=835506
Краткое описание на русском
Отлавливали ли вы этот баг в прошлых проверках Chromium?
НЛО прилетело и опубликовало эту надпись здесь
По всей видимости нет. Но у нас при написании статей и нет задачи найти как можно больше багов в проекте. :)
Вопрос был еще и в том, может ли PVS-Studio находить подобную ошибку?
Суть бага:

void buggy_function()
{
float* table = nullptr;
if (some_condition) {
float another_table[] = { 0.1, 0.2, 0,3 };
table = another_table;
}
some_other_function(table);
}

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

V506 CWE-562 Pointer to local variable 'x' is stored outside the scope of this variable. Such a pointer will become invalid. consoleapplication2017.cpp 31
Зарегистрируйтесь на Хабре, чтобы оставить комментарий