Pull to refresh
606
55.1
Андрей Карпов @Andrey2008

Директор по маркетингу

Send message

Путеводитель C++ программиста по неопределённому поведению

Level of difficultyHard
Reading time3 min
Views10K

Путеводитель C\+\+\ программиста по неопределённому поведению


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

Читать дальше →

PVS-Studio соответствует требованиям ГОСТ Р 71207—2024 (статический анализ программного обеспечения)

Level of difficultyHard
Reading time71 min
Views3.2K

ГОСТ Р 71207
Инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024, выявляет критические ошибки и может использоваться при разработке безопасного программного обеспечения. Рассмотрим функциональные возможности, реализованные в PVS-Studio на конец 2024 года в отношении анализа исходного кода программного обеспечения, написанного на компилируемых языках программирования C, C++, C#, Java.

Читать дальше →

19 ошибок в LLVM 19

Level of difficultyMedium
Reading time15 min
Views4.2K

LLVM 19


Статический анализатор PVS-Studio способен находить ошибки даже в таком качественном и протестированном проекте, как LLVM. Чтобы это не было пустыми словами, мы время от времени перепроверяем проект и публикуем такие заметки, как эта.

Читать дальше →

DPDK: 100 больших и маленьких багов

Level of difficultyMedium
Reading time34 min
Views2.2K

100 багов в DPDK


В своей обители в Р'лайхе мёртвый Ктулху спит в ожидании своего часа. А в C коде проекта DPDK спит множество ошибок, и тоже в ожидании своего часа. Давайте посмотрим, какие из них может выявить анализатор PVS-Studio.

Читать дальше →

Поиск ошибок в юнит-тестах

Level of difficultyMedium
Reading time13 min
Views2K

Вы должны были бороться с ошибками


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

Читать дальше →

Самая красивая ошибка, которую я нашёл с помощью PVS-Studio в 2024 году

Reading time8 min
Views8K

Красивый баг


Сразу предупреждаю, мои вкусы очень специфичны. Красота ошибки в том, что человеку её очень сложно найти. Я не верю, что её можно заметить при обзоре кода. Если только заранее знать, что она есть, и искать её целенаправленно.


Ошибку я нашёл в проекте DPDK. В нём есть и другие ошибки, но про них потом. Они меркнут перед этим алмазом. Только не ждите чего-то эдакого. Ошибка проста до безобразия. Вот только найти её, просматривая код, ой как непросто. Собственно, попробуйте сами.

Читать дальше →

SafeCode – конференция, которой мне не хватало

Reading time3 min
Views3.1K

Умиление


Помню 100500 лет назад (ну ладно, всего 12), я писал на Хабре, что мне не хватает в России хардкорной C++ конференции. Затем появилась C++Russia. Навизуализировал.


Пару лет назад я начал грустить, что нет подходящей конференции на тему безопасности. Статью на эту тему я не писал, но желание исполнилось и даже побыстрее, чем с C++. Хочу познакомить вас с конференцией SafeCode.

Читать дальше →

ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода

Level of difficultyMedium
Reading time6 min
Views5.3K

PVS\-Studio, ГОСТ Р 71207\–2024


1 апреля 2024 года введён в действие новый ГОСТ "Статический анализ программного обеспечения". Если в ГОСТ Р 56939–2016 говорится о необходимости использования статического анализа при разработке безопасного программного обеспечения (РБПО), то ГОСТ Р 71207–2024 уточняет, что именно это означает.


В стандарте:


  • перечислены требования к инструментам статического анализа;
  • указано, какие ошибки они должны находить;
  • какие технологии использовать;
  • описан порядок внедрения в процесс разработки;
  • описан процесс регулярного использования;
  • и так далее.

Информация в ГОСТ очень плотная, и её тяжело сразу воспринять, если вы ранее не имели дело со статическим анализом кода и РБПО. Поэтому я подготовил и провёл цикл из 5 вебинаров, где разобрал различные аспекты ГОСТ и примерами пояснил некоторых термины.


Вебинары вытекают один из другого, но в принципе они достаточно независимые, и вы можете начать знакомиться с новым ГОСТ с просмотра любого из них. Но обо всём по порядку.

Читать дальше →

Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов

Level of difficultyEasy
Reading time5 min
Views40K

Редкий вид бага
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?

Читать дальше →

С++: освобождение ресурсов в деструкторах с использованием вспомогательных функций

Level of difficultyEasy
Reading time7 min
Views8.1K

Про освобождение ресурсов в деструкторах с использованием вспомогательных функции


В этой статье мы рассмотрим, как правильно разрушать объекты в ООП программе на языке C++, не выполняя избыточных операций. Этим мы завершим цикл публикаций, посвящённый обзору ошибок в игровом движке qdEngine.

Читать дальше →

Проверка игрового движка qdEngine, часть третья: дополнительная десятка багов

Level of difficultyMedium
Reading time9 min
Views1.8K

Часть третья


В первой статье про qdEngine было рассмотрено 10 ошибок, выбранных плагином PVS-Studio. Однако есть ещё 10 багов, заслуживающих внимания. Как говорится, лучше учиться на чужих ошибках. Заодно они хорошо демонстрируют возможности PVS-Studio в выявлении разнообразнейших ошибочных паттернов.

Читать дальше →

Проверка игрового движка qdEngine, часть вторая: упрощение C++ кода

Level of difficultyMedium
Reading time7 min
Views3.4K

Ищем баг
В этой статье мы рассмотрим, как статический анализатор PVS-Studio воодушевляет заняться рефакторингом кода. Ведь чем короче, проще и понятнее код, тем меньше в нём ошибок.

Читать дальше →

Проверка игрового движка qdEngine, часть первая: топ 10 предупреждений PVS-Studio

Level of difficultyMedium
Reading time13 min
Views3.1K

Братья Пилоты, qdEngine, PVS-Studio
Баги, которые удалось найти в движке qdEngine, оказались весьма разнообразны, поэтому не хочется мешать всё в кучу в одной публикации. Читатели могут упустить интересные темы, связанные с написанием качественного кода. Поэтому разбор проекта выйдет в виде серии публикаций, первая из которых посвящается наиболее интересным срабатываниям с точки зрения плагина PVS-Studio.

Читать дальше →

Статический анализатор подталкивает писать чистый код

Level of difficultyMedium
Reading time4 min
Views7.8K

Разработчику платят за количество строк кода
Статические анализаторы помогают не только обнаруживать ошибки и дефекты безопасности, но и делать код чище. Выявляя лишние проверки, дублирующие действия и другие аномалии, можно сделать код проще, красивее и легче для чтения. Разберём это на практическом примере рефакторинга функции.

Читать дальше →

Встречи с командой PVS-Studio, митапы, сотрудничество

Level of difficultyEasy
Reading time2 min
Views574

PVS-Studio, конференции


Команда PVS-Studio в целом и я в частности активно участвуем в различных конференциях, подкастах, митапах и других мероприятиях. Нового в этом нет, но есть пара причин сделать маленькую заметку на эту тему.


Первая причина — предложить тем, кто интересуется нашим блогом на Хабре, подписаться на рассылку/телеграм/группу, чтобы не пропустить мероприятие, где можно пообщаться с нами. Живое общение — это всегда интересно.


Вторая причина — ещё раз озвучить, что мы открыты к сотрудничеству и готовы пообщаться с организаторами митапов, DevRel-ами компаний и т.д. Напишите нам.

Читать дальше →

Притча о нулевом указателе для ленивых C программистов

Level of difficultyEasy
Reading time2 min
Views10K

Я согласен, что ошибка выделения памяти с помощью malloc редкая ситуация, и после такой ошибки, скорее всего, невозможно полноценное функционирование программы. Но меня удивляет, с каким упорством программисты, приводя эти аргументы, предлагают вообще ничего не делать в такой ситуации. Я не призываю всех делать сложные механизмы восстановления работы после нехватки памяти или использовать заранее выделенные резервные буферы. Многим программам не нужны такие сложные механизмы. Тем не менее я не понимаю, почему хотя бы минимально не обработать такие ситуации корректно. Раз других объяснений пока не хватило, попробую в этот раз рассказать короткую притчу.


Притча о нулевом указателе

Читать дальше →

Почему проверять результат вызова malloc c помощью assert плохая идея

Level of difficultyMedium
Reading time3 min
Views8.8K

malloc и assert


Указатель, который вернула функция malloc, необходимо проверить перед использованием. Неправильным решением будет использовать для этого макрос assert. В этой статье мы разберём, почему это является антипаттерном.

Читать дальше →

Следует ли проверять указатель на NULL перед вызовом функции free?

Level of difficultyMedium
Reading time8 min
Views13K

Проверка указателя перед вызовом функции free


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

Читать дальше →

Какую статью хочется прочитать в нашем блоге на тему C++, C# или Java?

Level of difficultyEasy
Reading time3 min
Views2.2K

Какую статью хочется прочитать


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


На данный момент контент нашего блога можно разделить на 4 основные категории:


  1. Теоретические статьи;
  2. Информационно-развлекательные статьи;
  3. Проверка открытых проектов;
  4. Всё остальное.
Читать дальше →

Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK

Level of difficultyMedium
Reading time12 min
Views4.8K

Использование TAB в строковом литерале


GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов, который интересно проверять с помощью анализатора PVS-Studio. Тем более, что предыдущую проверку мы делали около 3 лет назад, а значит, наверняка найдём в нём новые ошибки.


Очень не хотелось частично повторять введение из прошлой статьи "Выявляем опечатки в проекте GTK 4 с помощью PVS-Studio", но подозреваю, что далеко не все читатели знакомы с GTK. Поэтому вкратце: библиотека позволяет кроссплатформенно реализовывать графический пользовательский интерфейс. Полностью бесплатна и имеет открытый исходный код, лицензированный под GNU GPL, что позволяет использовать её в любых проектах (даже коммерческих).

Читать дальше →
1
23 ...

Information

Rating
127-th
Date of birth
Registered
Activity

Specialization

Specialist
C++
C
Software development