Как стать автором
Обновить

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

А ведь Google выдаёт деньги за баги найденные в Chrome, решили сорвать банк? ;)
Хотя позиция ваша касательно этого вопроса мне нравится, желаю вам большого заказа от Google
Ошибка в коде не всегда есть баг (ИМХО). Этот код может либо не вызываться никогда, либо выдавать правильные результаты на тех наборах данных, которые в него подаются. Для меня баг, это тройка из: шагов для воспроизведения, ожидаемого результата и фактического результата, где ожидаемый и фактический результат расходятся. Зная ошибку в годе совершенно не факт, что так уж просто заставить ее выстрелить.
>> Ошибка в коде не всегда есть баг

Это называется уязвимость. Когда вы читаете в новостях «обнаружена уязвимость» — это вот значит, что кто-то нашел ПОТЕНЦИАЛЬНУЮ ошибку.
Нет, это значит, что ожидаемый и фактический результат расходятся и для этого есть шаги для воспроизведения.
Не совсем. Когда я читаю: «обнаружена уязвимость», то это «кто-то нашел ПОТЕНЦИАЛЬНУЮ ошибку.» Когда я читаю: «выпущен exploit», то это кто-то нашел шаги для воспроизведения и даже их автоматизировал.
Да, согласен с вами, то что накопали авторы статьи это уязвимости. Причем опять же, не факт, что все их можно эксплуатировать.
Согласен — хороший статический анализатор кода стоит покупки.

Раз мы говорим о PVS — будет ли выпущена command-line версия для linux? Будет ли PVS выпущена в качестве библиотеки и таким образом появится возможность написать плагины для других IDE (e.g. Eclipse)?
судя по ихнему сайту — любая глупость за ваши деньги
сами они даже ветку под линь развивать не собираются
Вы лично готовы купить Линукс-версию?
Если Linux версия будет находить баги в нашем c/c++ коде то да. Я поговорю с манагером и скорее всего купят продукт, копий десять. С покупкой полезного софта (по разумной цене) никогда проблем в нашей компании не было.
10 копий — это цена почти Site License. Напишите мне на e-mail и мы обсудим варианты.
Если Linux версия будет находить баги в нашем c/c++ коде
А вы заметите свои баги за багами gcc?
Да, для этого им будет необходимо приобрести PVS-Studio.

Вот так они и купят разработку или вашу организацию целиком. :)

— Нам нужена PVS-Studio!
— Сделано!
— Какая версия?
— Версия?!11
Не совсем понял про двойное удаление файла: получается некая двусмысленность, если в итоге файл удалится на второй попытке, а при этом в лог пойдет запись о том, что удалить нельзя.
Не вижу двусмысленности. Если 2 раза не удалось удалить, то запишем сообщение в лог.
Ну так если один раз удалилось, то тоже пишется в лог, нет?
То есть как, одно удаление завалилось, другое — нет => условие по-любому будет истинным => будет запись в лог.
false && true => false
Во я даю, решил чет, что условие по false выполняется, приплыли
if (!file_util::Delete(db_name, false) &&
!file_util::Delete(db_name, false)) {

Читаю код вслух. :)

!file_util::Delete(db_name, false) — Если нам не удалось удалить файл

&& — И при этом

!file_util::Delete(db_name, false) — нам опять не удалось удалить файл

То поместим сообщение в лог.
Охтыж блин, ну я и затупил, мозг чет сплавился в далекие страны.
if (!file_util::Delete(db_name, false) &&
!file_util::Delete(db_name, false))

Очень странное представление о красивом коде. Если файл не удалился, но есть подозрение что он может удалится позже — нужно создать очередь для отложенного удаления.
зато так быстрее.
Это, к стати, вполне может быть не красивым кодом, а грязным хаком, написанным из-за осознания глючности метода file_util::Delete или из-за знания того, что этот файл может в данный момент читаться другим потоком самого Хромиума и нежеланием с этим потоком общаться на предмет ожидания освобождения ресурса.
А всего в багтрекере Хромиума на данный момент 27000 багов. Солидное число. Хотя и проект, конечно, огромный.
Это нормально для крупного проекта. Многие баг-репорты содержат либо недостаточно информации, необходимой для отладки, либо сомнительный фич-реквест. Такие отчеты не удаляют, а висят в баг-трекерах годами.
… а ещё дубликаты
Сорри, перепутал кнопки :)
Планируется ли версия под Linux?
Тот же Гугл имеет несравнимо бОльшую кодовую базу под Линуксом.
Да, если хватит здоровья и повезёт. А пока нет, по ряду причин:

1) Это большая сложная задача. Подробнее в FAQ: "А
что, у вас только под Windows версия? Сделайте под Linux, это же просто! Какая разница, в какой операционной системе текстовые файлы (с кодом) анализировать?
"

2) В Windows проще зарабатывать деньги. Не забывайте, что мы стартап, а не финансируемый отдел корпорации. Что заработали, то и потратили на развитие.
2й аргумент совершенно неубедителен. Ваша программа же не для конечных пользователей (которые в большинстве сидят на Windows) рассчитана, а на разработчиков. А кроме прикладных программ для Windows есть огромный рынок Linux серверов, embedded и другого, где еще не всегда возможно использовать дебаггер и профайлер, как в Windows.
Вы пишите, что пользователей под Windows больше. Разработчиков для таких пользователей тоже больше, разумеется.

Кстати вот Вы готовы купить линукс-версию pvs-studio?
Ну вот возьмите большинство веб-сервисов. Большинство их используют из Windows, но это не означает, что разработчики используют Windows. Поддержка GCC, кстати, даст почти бесплатно еще и поддержку Mac OS X, с более платёжеспособной аудиторией (США).

Сам купить не готов, я студент и крупными проектами на C++ не занимаюсь и таких денег не имею. Несколько раз после таких статей хотел пощупать демо (проанализировав какие-нибудь open source проекты), и каждый раз вспоминал, что оно win-only.
Вот видите, Вы купить не готовы, но легко даете советы в какую сторону нам развивать наш бизнес…
Я не давал советы и прекрасно понимаю, что распылять силы на несколько платформ небольшой компании может быть не выгодно. Просто я думаю, что Ваш в 2й аргумент написан не потому, что Вы исследовали рынок и пришли к такому выводу, а для того, чтобы оправдать недостаток продукта.
Надо заметить, авторы Valgrind пошли наоборот: начали с Linux, а потом написали FAQ почему их не будет на Windows (слишком сложно, проще переписать с нуля)

По опыту работы в кросс-платформенной системе тестирования (ThreadSanitizer) могу сказать что под Linux писать всё-таки проще: почти всё что нужно документировано, да ещё и с исходниками. А в потрохах Windows нередко чувствуешь себя слепым
«подобные ошибки вполне имеют место быть»
Нет такого выражения как «имеет место быть». «Имеет место».
а что сразу или одно из двух?
Что?
При этом функция возвращает массив из элементов 'char' длиной N.

Функция возвращает ссылку на массив.
Согласен. Неаккуратно написал.
А вы даете всем OSS проектам копии лицензий, или это выборочно? Просто я бы не отказался поанализировать вот этот проект. :)
Пост про это здесь.
Интересно как PVS-Studio отнесется к C# проекту.
PVS-Studio не работает с C# и откажется проверять решение, если в нём нет *.c, *.cpp файлов:
Files with C or C++ source code for analysis not found. If they are present, enable projects which were excluded from build in Configuration Manager.
На моём крупном проекте триальная версия PVS-Studio настолько сильно искажает результат (не показывает), что невозможно понять, есть ли какая-нибудь польза от неё вообще…
Искажает результат — это какой-то очень сильный филологический оборот. Пишите нам в саппорт — разберемся и найдем все проблемы в вашем коде.
А вы исходник PVS прогоняли через PVS?
У нас ежедневно ночные билды проверяются. И иногда находим ошибки, разумеется.
Например, совсем недавно сами в себе нашли это.
Насчет двойного удаление, зачем придумывать очередной хитрый механизм «Все гениальное — просто», и тут просто и без выдумки аля через «третью переменную».
Надо сказать, частично причиной «качественности проекта Chromium» является то, что ощутимая часть его кода регулярно тестируется динамическими анализаторами: Valgrind, ThreadSanitizer, HeapChecker
build.chromium.org/p/chromium.memory/console
Но увы, они действительно не могут найти все ошибки.
И, к сожалению, Valgrind не работает на Windows (см. найденную Вами ошибку в time_win.cc)

«При работе с проектом Chromium было на самом деле не очень понятно, кто кого проверяет. Мы нашли и исправили в PVS-Studio несколько ошибок»
Точно, в вышеупомянутые динамические анализаторы тоже было зафайлено немало багов :)
А вот многие коммерческие анализаторы, вроде Intel Parallel Studio и Purify, весьма плохо работают с Chromium. Они не прошли стадию «непонятно кто кого проверяет»…
я вот только не понял
как там моги оказаться проверки unsigned на меньше нуля
gcc это ворнингами же выдаёт
> Количество строк посчитать затрудняюсь

find . -name \*.cc | xargs cat | wc -l

В любом нормальном шелле эта задача решается за несколько секунд. Конечно, решение не точное (например, хидеры не ищет), зато позволяет очень быстро и просто получить качественную оценку объёма кодовой базы.
Прошу сделать это и написать результат. Мне интересно иметь представление о количестве строк кода.
Сделал так:

$ for EXT in cc c cpp h ; do files=`find . -name \*.${EXT}|wc -l`; rows=`find . -name \*.${EXT}|xargs cat|wc -l`; echo $EXT: $files files, $rows rows; done

cc: 8161 files, 3187779 rows
c: 5912 files, 3143894 rows
cpp: 8170 files, 2426530 rows
h: 22999 files, 3925234 rows


Итого: 45242 файла, 12683437 строк (12.5 М! Внушает!)
по-моему, вы посчитали пустые строки и строки-комментарии. Это не сильно ли искажает картину?
Принципиально — вряд ли.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.