Для получения триального ключа
заполните форму ниже
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
Уточнения о проверке проектов CPython и…

Уточнения о проверке проектов CPython и Ruby

11 Авг 2016

В одной из недавних статей мы сравнивали классические реализации языков Python и Ruby по плотности ошибок. При этом ошибку допустили в самой статье: в список ошибок CPython попали ошибки из сторонних библиотек. Поэтому перепроверим проекты и посчитаем заново всю статистику.

0418_RubyCPythonDisclaimer_ru/image1.png

В предыдущей серии

0418_RubyCPythonDisclaimer_ru/image2.png

Часть ошибок (фрагменты N2, N4, N5, N6), найденных в предыдущей статье относятся к OpenSSL. Стоит отметить, что эти ошибки так или иначе оказывают влияние и на проекты, использующие эту библиотеку, включая CPython. Однако причислять их к ошибкам самого проекта будет неправильно. Естественно в PVS-Studio есть функционал для игнорирования такого рода срабатываний: можно просто добавить каталог с вашими externals или 3rd_party в список игнорируемых и больше при проверке своего проекта срабатываний оттуда вы не увидите.

О новой проверке

На этот раз для проверки CPython и Ruby воспользуемся разрабатываемой сейчас Linux версией. Работает она очень просто: просто запускаем сборку из PVS-Studio и ждём её окончания. PVS-Studio отслеживает все запуски компилятора, поэтому не зависит от способа сборки проекта. На выходе получаем лог.

Плотность ошибок

В этот раз каких-то новых ошибок, достаточно интересных для описания в статье я не нашёл. Есть ошибки, связанные с некорректной обработкой аварийных ситуаций. Они часто встречаются даже в хорошо протестированных проектах, потому что на такие ситуации тесты пишут реже. Вот такой пример можно найти в CPython:

int
_PyState_AddModule(PyObject* module, struct PyModuleDef* def)
{
  PyInterpreterState *state;
  if (def->m_slots) {
    ....
    return -1;
  }
  state = GET_INTERP_STATE();
  if (!def)
    return -1;
  ....
}

Предупреждение PVS-Studio: V595 The 'def' pointer was utilized before it was verified against nullptr. Check lines: 286, 292. pystate.c 286

Есть просто не очень хорошо оформленный код. Есть условные выражения, которые выглядят странно после раскрытия макросов: например, одно и то же условие может проверяться несколько раз. Но в целом, всё хорошо.

Что касается новой статистике, то вот она:

0418_RubyCPythonDisclaimer_ru/image3.png

Картина очень похожа на ту, что мы видели раньше, за исключением того, что пропали ошибки из сторонних библиотек и целый класс ошибок, относящийся к Windows-only коду.

0418_RubyCPythonDisclaimer_ru/image4.png

Заключение

Ошибок в проектах удалось найти немного. Но это и неудивительно: обо всём самом подозрительном было написано совсем недавно. Но статический анализ нужно использовать не только для контроля качества, но и при непосредственном написании кода: на этой стадии находить ошибки проще и дешевле.

Предлагаю всем желающим попробовать PVS-Studio и записаться на бета-версию для Linux.

Последние статьи:

Опрос:

Популярные статьи по теме
Holy C++

Дата: 23 Ноя 2022

Автор: Гость

В этой статье постараюсь затронуть все вещи, которые можно без зазрения совести выкинуть из С++, не потеряв ничего (кроме боли), уменьшить стандарт, нагрузку на создателей компиляторов, студентов, из…
Продление жизни временных значений в С++: рецепты и подводные камни

Дата: 01 Ноя 2022

Автор: Гость

Прочитав эту статью, вы узнаете следующее: способы, которыми можно продлить время жизни временного объекта в С++; рекомендации и подводные камни этого механизма, с которыми может столкнуться С++ прог…
Как мы баг в PVS-Studio искали или 278 Гигабайтов логов

Дата: 28 Окт 2022

Автор: Григорий Семенчев, Сергей Ларин, Филипп Хандельянц

Предлагаем вашему вниманию интересную историю о поиске бага внутри анализатора PVS-Studio. Да, мы тоже допускаем ошибки, но мы готовы засучить рукава и залезть в самую глубину "кроличьей норы".
0, 1, 2, Фредди забрал Blender

Дата: 26 Окт 2022

Автор: Андрей Карпов

Эта статья могла бы получить название "Как PVS-Studio защищает от поспешных правок кода, пример N7". Однако так именовать статьи становится скучновато. Поэтому сейчас вы узнаете, причём здесь Фредди …
Примеры ошибок, которые может обнаружить PVS-Studio в коде LLVM 15.0

Дата: 25 Окт 2022

Автор: Андрей Карпов

Компиляторы развиваются и выдают всё больше предупреждений. Остаются ли преимущества от использования статических анализаторов кода, таких как PVS-Studio? Да, так как анализаторы тоже развиваются. Пе…

Комментарии (0)

Следующие комментарии
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо