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

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

Канал-дублёр в MAX: https://max.ru/join/3VWTp9apkQvTMSRQ__LGiTQ5NGVBj8p_tOpwlQO6vS8
Download Telegram
Тема неопределённого поведения (UB) в языке C++ освещается и обсуждается многие годы, но это не значит, что она исчерпала себя. Это плата, которую программисты отдают за эффективные оптимизации кода, такие как удаление ряда проверок. C++ - опасный инструмент, и не помешает лишний раз напомнить, как правильно держать его в руках.

Доклад коллеги Алексея на эту тему:
Неопределённое поведение: если про него не думаете, это не значит, что его нет.

P.S. Был задан вопрос про безопасные компиляторы (ГОСТ Р 71206—2024). Подробнее с этой темой можно познакомиться здесь: Использование безопасной системы сборки программного обеспечения.
👍4
Быть тимлидом — это не только про процессы и задачи, но и про людей, ожидания и собственные сомнения.

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

Посмотреть можно тут:

- Наш сайт
- VK video
- Rutube
- YouTube

#вебинар
2
Индустрия разделится на фабрики дешёвого мусора и компании, умеющие контролировать качество.

PVS-Studio - статический анализатор контролёр кода :)
💯3👍2
Компании в России судятся с работниками из-за нейросетей
https://kod.ru/ai-workers-sud

Российские компании судятся с сотрудниками, делавшими работу с помощью нейросетей. О новой судебной практике и трендах на рынке труда сообщает РБК.

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

Причина проста, отмечает РБК: в трудовых договорах нет прямого запрета на использование ИИ. Если компания приняла результат — в его низком качестве виновата она сама.

Показательный пример, который приводит издание: продакт-менеджер стартапа самостоятельно настраивал облачный сервис по инструкции чат-бота. В итоге он стёр почти все данные на серверах компании. Бизнес несколько дней не мог работать и понёс серьёзные убытки. Вместо ожидаемой экономии пришлось нанимать внешних специалистов для восстановления из бэкапа.
По данным исследования Ancor и Reforum Future Hub, 45% россиян уже применяют ИИ в работе, ещё 36% — очень активно. Чаще всего нейросетям поручают тексты, сбор данных и креативные задачи.

Как пишет РБК, результаты такого сотрудничества оставляют желать лучшего. В сданных проектах обнаруживаются нестыковки, повторы и грубые ошибки.

Один бизнесмен нанял консультанта для анализа нового направления — тот быстро сдал красивый отчёт на 50 страниц. При проверке выяснилось: данные заказчика проигнорированы, часть вопросов осталась без ответа, а стиль явно выдавал электронного помощника.

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

Бездумное использование ИИ дорого обходится бизнесу: например, генерация картинок в стиле охраняемых авторским правом художников уже приводит к судебным искам.

Заказчики пытаются оспорить договоры и вернуть деньги, узнав об использовании алгоритмов. По данным РБК, суды последовательно им отказывают: оценивается лишь качество результата, а не инструменты исполнителя.

Особенно опасным трендом в издании называют атаку «нейроюристов». Предприниматели заменяют адвокатов чат-ботами — и получают документы со ссылками на несуществующие законы.

Нейросетями увлеклись даже чиновники, отмечает РБК. Патентный поверенный компании UserGate уже получает официальные отказы, написанные явно с помощью ИИ, — с сомнительными нормами и хромающей логикой.

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

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


Буду ИИ-контролёром, кста. Не люблю нейрохрючево 🌝
👍6😁32
➡️Утечка через сравнение строк

Как думаете, сколько времени занимает такая проверка?
if token == "secret_key":
allow_access()


Почти за мгновение. Но иногда эти миллисекунды могут выдать секрет.

🔍В чем дело

Во многих реализациях строки сравниваются посимвольно.

Алгоритм обычно выглядит так:
1) Сравнить первый символ
2) Если совпал - второй
3) Если совпал второй - третий
И так далее

Если символ не совпал, тогда сравнение заканчивается.

📝Где появляется проблема

Предположим секретный токен
A9F4K2

Если атакующий отправит
BXXXX

Сравнение закончится на первом символе.

Если отправить AXXXX, то проверка пройдет чуть дальше.

В результате время выполнения будет немного отличаться.

Если отправить много запросов и измерять время ответа, можно постепенно угадывать символы по одному.

✔️Как решают проблему

Используют сравнение за константное время.

Алгоритм сравнивает все символы, даже если первый уже не совпал.

Для этого во многих языках есть специальные функции, например:

GO
subtle.ConstantTimeCompare(a, b)


JavaScript
crypto.timingSafeEqual(a, b)


😎Как часто вы видели проверки секретов через обычное ==?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Самое быстрое — «хренак-хренак и в продакшн»: о статическом анализе и скорости выхода продукта

Иногда задают вопрос: "Как статический анализ ускорит Time to market?"

Никак. Статический анализатор не ускорит выход продукта/обновления на рынок. С ним будет дороже и медленнее. Причина — неправильный вопрос.

Аналогично можно спрашивать, как этап тестирования ускоряет Time to market? Точно так же — никак. Тестировщикам мало того, что надо деньги платить, так они ещё будут разработчиков багами отвлекать. Намного быстрее просто написать запускающийся код и выложить дистрибутив. Как говорится, "хренак-хренак и в продакшен". Это самый быстрый вариант.

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

Какой вопрос правильный?

Как статический анализ ускоряет Time to market при выпуске продуктов заданного уровня качества и надёжности?

Другое дело. Если нужно выпустить качественный продукт, то статический анализ может выявить многие ошибки и дефекты безопасности быстрее и дешевле, чем другие методы. Некоторые виды дефектов лучше обнаруживаются статическим анализатором кода, чем юнит-тестами, динамическим анализом, ручным тестирование и так далее.

Впрочем, это свойство и других методик. Есть дефекты, которые наиболее эффективно будут обнаруживать юнит-тесты, поэтому профессиональные разработчики не пытаются выбрать какой-то один подход, а используют сразу несколько. Эти разные меры усиливают друг друга.

Статический анализ применяется на этапе конструирования, то есть написания кода, поэтому позволяет устранить многие ошибки ещё до этапа тестирования. Хотя на анализ предупреждений необходимо тратить время, это окупается сокращением числа дефектов, которые выявляются на других этапах проверки продукта и его эксплуатации. Известно, что чем раньше ошибка найдена, тем дешевле её исправление.
👍8
Сегодня мини-подборка под разный интерес:

1) Обзор PVS-Studio 7.42. Там говорится, что для студентов временно нет вариантов использования. Переработали разделы сайта, всё опять есть – Бесплатное использование PVS-Studio студентами и преподавателями.

2) Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей. Немного РБПО теории. А вообще, напоминаю, что у нас есть про РБПО вот такая большая подборка – GOST56939.RU.

3) Запускаем цикл вебинаров, посвященных современному Gradle для Java-разработчика. Первый вебинар – Современный Gradle для Java-разработчика: один модуль — хорошо, несколько — лучше.

4) Продолжаем цикл подкастов "Разбаговка" – Контроль команды: как и зачем?
Единорог Коди и его товарищ Баг — узнаваемые маскоты PVS-Studio. Этих персонажей вы видели во многих сценариях: при археологических раскопках, в космосе, при ограблении банка, в саду и в сточной канаве. Но как вообще появился этот единорог, и как же он выглядел на заре времён?

Давайте посмотрим хронологию взросления Коди в новой статье, а также изучим самые занятные иллюстрации с его участием! Переходите по ссылке ❤️

#статья #PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Продолжаем развивать Go анализатор. Про новую диагностику в PVS-Studio для выявления классического паттерна опечаток. Как можно ошибиться при обработке ошибок в Go.
Мы открыли ранний доступ для анализатора TypeScript 🔥

Если вы оставляли заявку, проверьте почту — вам должны были прийти инструкции по тестированию. Если вдруг инструкции не обнаружите, напишите нам в поддержку.

А для тех, кто впервые узнал о разработке нами TS анализатора, вот ссылочка на регистрацию и участие в EAP ❤️

#eap #TS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
PVS-Studio в CMake: теперь официально
Если у вас кроссплатформенный проект на C или C++, то, как правило, вы не завязываетесь на одну систему сборки, а используете генератор сценариев для сборочных систем. Самый распространённый из них, CMake, недавно получил официальную интеграцию со статическим анализатором PVS-Studio для этих языков.
❤‍🔥82👍2
В социальных сетях вирусится высказывание Бьёрна Страуструпа про то, что ИИ в С++ не особо так успешен. Пожалуй, даПожалуй, да.
💯5
Продолжаем выкладывать избранные главы книги Сергей Кушниренко – Game++.

Часть 1. С++, движки и архитектуры: Часть 1.1, Часть 1.2.
У меня сегодня День Рождения. Приобретайте лицензии на PVS-Studio. Мне будет приятно! 🎂❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🏆75😐2
Коллега собрала интересные события в мире C++ за последнее время, а также полезные материалы.
🔥4👏2
Дайте посмотреть на нормальный С++ проект, созданный вайб-кодингом

Чтобы корректировать развитие PVS-Studio я заинтересован смотреть C++ проекты, созданные с использованием генеративного AI или, по-простому, вайб-кодинга. Но вот незадача: все кругом пишут про этот самый вайб-кодинг, но я не знаю, как и где искать такие открытые проекты.

Мне попадается какая-то белиберда типа enhance-client, сгенерированная за $15. Но это даже смотреть несерьёзно. По присутствию в репозитории .obj, .iobj, .ipdb файлов и прочего мусора видно, что автор не понимает, что он делает. Проект не компилируется по разным причинам, например, из-за того, что заложен какой-то огрызок файла bytes.hpp (у массива нет конца).

Если немного поправить и проверить, что удалось собрать, то там лезут перлы вида:
void enhance::modules::autototem::run()
{
  ....
  auto env = enhance::instance->get_env();
  if (!env)
  {
    env->DeleteLocalRef(player);
    return;
  }
  ....
}

Предупреждение PVS-Studio: V522 [CWE-476, CERT-EXP34-C, SEC-NULL] Dereferencing of the null pointer 'env' might take place. autototem.cpp 757

Явное разыменование нулевого указателя.

Или бессмысленные сравнения значения типа int с константой 0.1f:
int sdk::minecraft_client::get_attack_cooldown() { .... }
 
void enhance::modules::shield_breaker::run()
{
  ....
  if (sdk::instance->get_attack_cooldown() > 0.1f)
  ....
}

Предупреждение PVS-Studio: V674 [CWE-682, CERT-FLP36-C] The '0.1f' literal of the 'float' type is compared to a value of the 'int' type. shield_breaker.cpp 628

Такие ляпы нет смысла серьёзно разбирать и описывать.

Можно спросить: "А что ты хочешь от поделок за 15$?" Да, в общем-то, ничего, но вместо нормальных проектов попадаются они. Мне интересно изучить большие открытые проекты нормального качества, при написании которых используется GenAI. А то пока ощущение, что термин "вайб-кодинг" есть, а C++ проектов нет. Или за них стыдно? :)

Если вы знаете подобные большие проекты, то присылайте ссылки на них в комментарии. Заранее спасибо.
👍7😁1
Появилась публичная запись доклада моих коллег с C++Russia 2025. Юрий Минаев, Олег Лысый – Семантика C++ изнутри компилятора.

Смотреть: VKvideo, Youtube, Cppconf.

Поговорим о семантике C++ с точки зрения статического анализатора или фронтенда компилятора. Рассмотрим, как устроена таблица символов и как происходит поиск имен, а также как семантика влияет на парсинг. Поговорим о том, как происходит выбор перегрузок и каким образом компилятор находит функции, которые даже не видны в текущей точке программы. Еще затронем тему шаблонов и их инстанцирования.
👍7
Про новые интеграции ⚡️

Начиная с релиза 7.42 у нас появилось еще больше новых интеграций:

1️⃣ Qt Creator 19
Появилась поддержка плагина PVS-Studio для Qt Creator версий 19.x. Плагин позволяет запускать анализ, просматривать предупреждения и работать с кодом, не покидая привычную среду разработки. Подробнее о работе с плагином можно прочитать в документации.

2️⃣ Интеграция в SourceCraft
SourceCraft — платформа, с помощью которой можно разрабатывать исходный код, управлять версиями, тестировать, собирать, развёртывать и сопровождать программные продукты. Мы проверили техническую совместимость PVS-Studio с этой платформой и описали процесс её использования в нашей документации.

3️⃣ Официальная интеграция в CMake
Начиная с версии 4.3.0 сборочная система CMake имеет встроенный механизм для работы с PVS-Studio, при котором срабатывания анализатора будут появляться в процессе компиляции проекта. Подробнее об этом можно прочитать в документации.

А тут вы найдете полную заметку со всеми последними обновлениями 👈🏻

#PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👌2
НЕкурс про разработку безопасного программного обеспечения (РБПО)

Мы подготовили раздел материалов, посвящённых разработке безопасного ПО (РБПО) по ГОСТ Р 56939—2024. Теперь эти материалы представлены в виде бесплатного онлайн-курса из 28 уроков. Такая структура поможет, во-первых, распределить нагрузку при знакомстве с теорией, а во-вторых, проверить свои знания.

Материалы о РБПО по ГОСТ Р 56939—2024

Компания ООО "ПВС" совместно с учебным центром "Маском" провела цикл вебинаров, посвящённых разработке безопасного программного обеспечения (РБПО). Совместно с приглашёнными экспертами из различных компаний мы рассмотрели 25 процессов, приведённых в ГОСТ Р 56939—2024.

Общее количество вебинаров — 30: каждому из 25 процессов ГОСТа посвящено по одному вебинару и 5 записано дополнительно на смежные темы. Записи всех вебинаров и подборка дополнительной информации доступна бесплатно по ссылке: ГОСТ56939.РФ.

Материалы ориентированы на специалистов, которые начинают знакомиться с темой РБПО. Для них они станут отправной точкой погружения в процессы безопасной разработки и внедрением их в компании. Те, кто уже знаком с темой, также найдут для себя новое и полезное.

Теперь с этими материалами и вебинарами можно знакомиться ещё и в формате уроков.

Чем не является курс

Чтобы избежать неправильных ожиданий, просим обратить внимание, что это не курс в области информационной безопасности в классическом понимании.

Во-первых, предлагаемый материал рассчитан на самостоятельное знакомство и не включает практическую часть или взаимодействие с преподавателем.

Во-вторых, существует перечень организаций, осуществляющих образовательную деятельность, имеющих дополнительные профессиональные программы в области информационной безопасности, согласованные с ФСТЭК. Мы не ведём образовательную деятельность, не входим в этот список и не выдаём удостоверяющие документы.

Если вам необходимо направить сотрудников на курсы повышения квалификации и получить подтверждающие документы, то вы можете обратиться в одну из организаций, приведённых в списке. Например, вы можете обратиться в УЦ "Маском", вместе с которым мы проводили вебинары. ФСТЭК России согласовала их программу повышения квалификации М-БРПО "Специалист по процессам разработки безопасного программного обеспечения" (200 часов).

Чем является курс

Суммарное время предлагаемых к изучению вебинаров составляет около 50 часов. Их можно смотреть на ускорении. Однако даже в этом случае с учётом дополнительных материалов и отсылок на внешние ресурсы изучение займёт около двух рабочих недель.

Это достаточно большая задача, поэтому мы решили помочь и разбили материалы на отдельные уроки. Так будет проще усваивать материал, а интерфейс позволяет отмечать, с чем вы уже познакомились.

После завершения курса вы можете пройти тестирование для самопроверки. В качестве приятного бонуса при хорошем прохождении теста вы получите ачивку – сертификат о знакомстве с курсом. Сертификат автоматически генерируется по окончании обучения и тестирования.

Тестирование также может использовать руководитель, чтобы убедиться, что сотрудники действительно изучили материалы и познакомились с основами РБПО.

Начать знакомство c курсом можно после регистрации/авторизации: Разработка безопасного программного обеспечения (РБПО) по ГОСТ Р 56939—2024
👍4