Бестиарий программирования
1.06K subscribers
303 photos
5 videos
4 files
374 links
Наблюдения за жизнью ошибок в коде.
Андрей Карпов.

ГОСТ Р 71207-2024, ГОСТ Р 56939-2024, РБПО, Статический анализ кода

Канал-дублёр в MAX: https://max.ru/join/3VWTp9apkQvTMSRQ__LGiTQ5NGVBj8p_tOpwlQO6vS8
Download Telegram
Мы иногда во внутреннем чате обмениваемся фрагментами кода с неочевидными ошибками, которые обнаруживаются с помощью PVS-Studio в каком-нибудь открытом проекте. Мол, кто быстро сообразит, что не так с кодом?

Вчера коллега поделился вот таким фрагментом кода из проекта SereneDB:
template <typename T>
struct NumericParameter : public Parameter {
using ValueType = T;
....
std::string name() const override {
if constexpr (std::is_same_v<ValueType, int16_t>) {
return "int16";
} else if constexpr (std::is_same_v<ValueType, uint16_t>) {
return "uint16";
} else if constexpr (std::is_same_v<ValueType, int32_t>) {
return "int32";
} else if constexpr (std::is_same_v<ValueType, uint32_t>) {
return "uint32";
} else if constexpr (std::is_same_v<ValueType, int64_t>) {
return "int64";
} else if constexpr (std::is_same_v<ValueType, uint64_t>) {
return "uint64";
} else if constexpr (std::is_same_v<ValueType, size_t>) {
return "size";
} else if constexpr (std::is_same_v<ValueType, double>) {
return "double";
} else {
static_assert("unsupported ValueType");
}
}
....
};

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

Ответ:

Анализатор PVS-Studio выдаёт предупреждение V591 Non-void function should return a value. parameters.h 222

На первый взгляд предупреждение странное и смахивает на ложное срабатывание, ведь не может быть, что функция закончила работу, не вернув значение с помощью оператора
return. Если выбирается ветка else, то там static_assert, и код просто не должен скомпилироваться. Во всех остальных случаях есть return "что-то";.

Но есть нюанс!

Ещё раз посмотрите на эту строчку:
static_assert("unsupported ValueType");


static_assert используется неправильно: пропущен bool-constexpr. Вернее, строковый литерал неявно конвертируется в значение true, и static_assert никогда не прервёт компиляцию. В итоге else-ветка функции ничего не возвращает, и её поведение будет не определено для всех специализаций NumericParameter, кроме указанных ранее в цепочке if constexpr.

Правильный вариант:
static_assert(false, "unsupported ValueType");
🔥261
P.S. Анализатор PVS-Studio внимательнее не только меня, но и LLM (см. комментарий на habr)
😁42🤣1
Обновлённое подробное описание PVS-Studio на начало 2026 года с точки зрения
• ГОСТ Р 71207—2024 — Статический анализ программного обеспечения,
• ГОСТ Р 56939—2024 — РБПО,
• приказа ФСТЭК №117,
• и т.д.

P.S. Команда PVS-Studio будет со стендом на ТБ Форум 2026 (18—20 февраля 2026, МВЦ "Крокус Экспо", павильон 2, зал 10). Я там тоже буду. Приходите задавать вопросы на тему публикации, стандартов и вообще.
🔥7
Бестиарий программирования pinned «Обновлённое подробное описание PVS-Studio на начало 2026 года с точки зрения • ГОСТ Р 71207—2024 — Статический анализ программного обеспечения, • ГОСТ Р 56939—2024 — РБПО, • приказа ФСТЭК №117, • и т.д. P.S. Команда PVS-Studio будет со стендом на ТБ Форум…»
Буду рад присланным идеям диагностических правил статического анализатора для языков Go, JavaScript, TypeScript. Такие ошибки, как деления на 0, не интересны. С ними и так всё понятно. Интересны разновидности опечаток (в духе забытого throw), паттерны неправильного использования функций и т.п. Заранее спасибо.
Даже немного не верится, но мы добрались до двух последних процессов ГОСТ Р 56939-2024!

Записи вебинаров:

Вебинар 24. Поиск уязвимостей в программном обеспечении при эксплуатации

Вебинар 25. Обеспечение безопасности при выводе программного обеспечения из эксплуатации

Другие записи можно найти на странице "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024".

Однако, нам сложно остановиться :) Поэтому вас ждёт ещё несколько дополнительных встреч. Уже запланировано:

• 04.02.2026 в 16:00 по МСК - Безопасность frontend-приложений: особенности, угрозы и анализаторы класса FAST (Frontend Application Security Testing)

• 11.02.2026 в 16:00 по МСК - PVS-Studio Atlas — новая платформа контроля качества кода
👍131
СВД Встраиваемые Системы приглашает 13 февраля / 12.00 на экспертный вебинар по разработке ПО с требованиями функциональной безопасности — без мистики, только проверенные методологии, стандарты и практика.

P.S. Мы сотрудничаем c СВД Встраиваемые Системы и благодарны им за отзыв, оставленный в конце 2025 года.
👍6
Выражаем благодарность команде отдела сертификационных испытаний АО Центр «Атомзащитаинформ». Отдел провёл испытания статического анализатора кода PVS-Studio и составил краткое ревью. Лаборатория считает целесообразным рассматривать PVS-Studio как SAST-средство, пригодное для встраивания в цикл разработки для выявления опечаток, логических ошибок, мёртвого кода и потенциальных уязвимостей. В частном порядке вы можете ознакомиться с отзывом, написав нам в поддержку.

Из недостатков отмечено ограничение по языкам. На данный момент продукт поддерживает только C, C++, C#, Java. Однако, забегая вперёд, могу сказать, что уже ведётся разработка по поддержке JavaScript, TypeScript и Go. Весной мы планируем организовать программу раннего доступа (EAP).
🔥14
Большой брат, биг-дата, ИИ...

Месяц звонки из "Яндекс для Бизнеса" (на телефоне распознается). Обычно не отвечаем, а сегодня ответили, чтобы отстали уже.

Хотели предложить для нашей компании Яндекс.Такси. Которым мы пользуемся сто лет.

Вот такая вот подготовительная работа и анализ потенциальный клиентов...
😁9
В ходе бонусного вебинара команда PVS-Studio представила новый продукт — PVS-Studio Atlas, предназначенный для работы с результатами анализа кода: просмотра, аналитики, разметки и формирования отчётов для сертификационных лабораторий и ФСТЭК.

P.S. Тестировании Atlas Viewer доступно на странице PVS-Studio Beta.
🔥7👍4👌1
Только ленивый не писал и не обсуждал недавнюю новость, что оркестр из агентов Opus’а написал компилятор для C. Ссылка №1, №2, №3. Мне близка вот эта мысль:
... Но как по мне теперь только больше возрастает необходимость людей, которые "проклятую реальность" понимают, чтобы всякие странные штуки фиксить и/или объяснять, как фиксить, а для этого нужен опыт.

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

10 бесплатных уроков, около 6 часов видео. В формате лайвкодинга Юрий Минаев (архитектор в компании PVS-Studio) показывает весь процесс разработки на C++ выдуманного языка программирования. Вы разберётесь, что такое язык и как формально описать его так, чтобы машина могла его понимать. Шаг за шагом вы реализуете лексер, вспомните основы грамматики и метод рекурсивного спуска, добавите в язык переменные и функции, научитесь вызывать их и корректно определять тип возвращаемого значения. Финальной частью станет написание собственного эвалюатора.
🔥14
Запись вебинара: Статический анализ кода в методическом документе ЦБ РФ "Профиль защиты".

Описание. Методический документ "Профиль защиты (ПЗ) прикладного ПО автоматизированных систем и приложений кредитных организаций и некредитных финансовых организаций", опубликованный в декабре 2025 года, уточнил и расширил многие меры, направленные на разработку безопасных программных продуктов. Например, перечислены требования, предъявляемые к инструментальным средствам статического анализа кода. В ходе вебинара рассмотрели эти новые требования, а также причины, по которым полезно изучить ГОСТ Р 56939—2024 и ГОСТ Р 71207—2024 при реализации требований безопасности, изложенных в ПЗ.

Примечание. По окончании вебинара был задан вопрос о сертификации средств статического анализа. В качестве ответа уместно привести цитату из статьи "Итоги этапа «Домашнее задание» испытаний статических анализаторов под патронажем ФСТЭК России":
Важно отметить, что в настоящий момент ФСТЭК России не предъявляет каких-либо специальных требований к инструментам статического анализа, на соответствие которым возможно проводить сертификационные испытания инструментов. Как следствие, любые требования заказчиком наличия сертификата ФСТЭК России на инструмент статического анализа являются его частной инициативой (подробнее — в эфире канала AMLive, выпуск «Как встроить безопасность в процесс разработки ПО: практика, ошибки, решения»).
🔥2
Запись бонусный вебинара цикла "Вокруг РБПО" – Системы с конструктивной информационной безопасностью.

В конце 2025 года вступил в силу национальный стандарт «ГОСТ Р 72118 Защита информации. Системы с конструктивной информационной безопасностью. Методология разработки».

С помощью приглашенного эксперта — Екатерины Рудиной (аналитик департамента перспективных технологий «Лаборатории Касперского») — мы разобрались, в чем сходство и различие таких систем с безопасным ПО, как соотносятся создание систем с КИБ и разработка безопасного ПО, чем новый стандарт полезен в работе специалистов по ИБ различного профиля.

Смотри также сайт, о котором рассказала Екатерина – securitybydesign.ru.
👍3❤‍🔥11
Зачем делать игры, которые увидят немногие? | Разбаговка #6

У нас в гостях Слава Грис, разработчик игр, блогер. В выпуске:
- Точка входа: История о том, как Слава оказался в геймдеве (спойлер: опыт не всегда стоит на первом месте).
- Дух андеграунда: Что движет автором, когда он создает игры не «для всех».
- Бизнес на коленке: Как инди-разработчику не затеряться в океане ежедневных релизов и найти своего игрока.
- Свобода vs Мейнстрим: Почему быть «маленьким» разработчиком — это суперсила, и зачем делать игры, которые поймут немногие.
Вышел новый релиз PVS-Studio — 7.41. В нём улучшения для Unreal Engine, поддержка MISRA C 2023, обновление плагина для IntelliJ IDEA и другие полезные изменения.

На мой взгляд особого внимания заслуживает новый механизм "Удаление неактуальных маркеров подавления".
По мере развития анализатора или изменения анализируемого кода ложное предупреждение может перестать генерироваться, и маркеры подавления, содержащиеся в строках исходного кода для этого предупреждения, перестанут быть актуальными.

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

Для очистки кодовой базы от неактуальных маркеров в пакете поставки анализатора PVS-Studio предусмотрена специальная утилита — pvs-fp-cleaner.
🔥6