Search
Write a publication
Pull to refresh

Comments 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 выполняется, приплыли
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 настолько сильно искажает результат (не показывает), что невозможно понять, есть ли какая-нибудь польза от неё вообще…
Искажает результат — это какой-то очень сильный филологический оборот. Пишите нам в саппорт — разберемся и найдем все проблемы в вашем коде.
У нас ежедневно ночные билды проверяются. И иногда находим ошибки, разумеется.
Насчет двойного удаление, зачем придумывать очередной хитрый механизм «Все гениальное — просто», и тут просто и без выдумки аля через «третью переменную».
Надо сказать, частично причиной «качественности проекта 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 М! Внушает!)
по-моему, вы посчитали пустые строки и строки-комментарии. Это не сильно ли искажает картину?
Sign up to leave a comment.