Бестиарий программирования
رفتن به کانال در Telegram
Наблюдения за жизнью ошибок в коде. Андрей Карпов. ГОСТ Р 71207-2024, ГОСТ Р 56939-2024, РБПО, Статический анализ кода Канал-дублёр в MAX: https://max.ru/join/3VWTp9apkQvTMSRQ__LGiTQ5NGVBj8p_tOpwlQO6vS8
نمایش بیشتر1 115
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
-230 روز
آرشیو پست ها
По техническим причинам вебинар "Зачем тестировщику нужна безопасность?" перенесён на 15 апреля. Время начала: 16:00.
+1
Предстоящие вебинары
15 апреля 14:00. Тимлид: ожидания, реальность и внутренние вопросы. Регистрация.
Быть тимлидом — это не только про процессы и задачи, но и про людей, ожидания и собственные сомнения. Инна Пристягина (руководитель отдела развития, PVS-Studio) разберёт, кто такой менеджер в IT и зачем он вообще нужен: как выстраивать взаимодействие с командой, какие стили управления работают и как не наломать дров на старте. Ольга Ладошкина (коуч IT-руководителей и топ-команд, бизнес-тренер, основатель проекта «Лидерская кухня»; наставник в Яндекс Практикуме) поговорит о внутренней стороне лидерства: почему этот путь пугает, с какими ловушками сталкиваются новые лидеры и как не потерять себя. Разберёт реальные кейсы и простые инструменты, которые помогут справляться и с командой, и с собой. Вебинар подойдёт тем, кто уже тимлид или только собирается им стать и хочет понять: «Это моё?»16 апреля 16:00. Зачем тестировщику нужна безопасность? Регистрация.
Безопасная разработка из опции превращается в обязательное требование: стандарты (российские и международные) все сильнее влияют на процессы разработки и тестирования. На вебинаре разберем, как тестировщику начать работать с безопасностью без узкой специализации в ИБ: какие базовые навыки нужны, как находить уязвимости на практике, что делать с найденными проблемами, как повысить свою ценность на рынке. На вебинаре вас ждут два практических доклада от экспертов: Безопасность для17 апреля 14:00. PVS-Studio в SAST: от стандартов безопасности к DevSecOps. Регистрация.чаQAников (Семен Ремезов, Senior QA, АО "Гринатом") Вы уже тестируете по ГОСТу (Глеб Асламов, Developer Advocate, PVS-Studio)
В этот раз рассмотрим использование PVS-Studio в роли SAST-инструмента для автоматического поиска ошибок и потенциальных уязвимостей в исходном коде. Покажем, какие типы проблем способен выявлять статический анализатор и как он помогает повысить качество и надёжность программного обеспечения. Кратко разберём сценарии интеграции PVS-Studio в процесс разработки и CI/CD, а также практические преимущества его применения на ранних этапах жизненного цикла разработки.
Поучаствовал в подкасте от компании EvApps.
IT ToLк by EvApps. Андрей Карпов про чистый код без вредных советов.
Вариант на Яндекс Музыка: только звук.
+1
Решил поделиться парой картинок для класса героя, которого можно получить во вчерашнем квизе. Уж очень они хороши. Я думал, что у меня будет мультикласс, а получил варвара :)
Главным направлением развития ИИ в 2026 году становится внедрение ИИ-агентов.
Главным направлением развития ИИ в 2026 году становится окончательная порча Хабра такими текстами :(
Помимо дня смеха, сегодня ровно как 2 года введён в действие ГОСТ Р 71207—2024 "Статический анализ программного обеспечения".
Если кто ещё не знаком: ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода.
Немного первоапрельского. Билды и баги: какой ты разработчик в мире RPG?
Repost from N/a
PVS-Studio — это B2B-решение, которым пользуются многие команды и компании по всему миру. В этой статье разберём основные особенности нашего анализатора, сценарии и варианты анализа, а также узнаем всё, что нужно знать для старта.
📲Мы в MAX
#PVS_Studio #статья
Repost from PVS-Studio: поиск ошибок в коде
Друзья, мы создали канал "PVS-Studio для бизнеса".
Что вы там найдете:
- как внедрение статического анализатора (SAST) сокращает технический долг и почему исправление ошибки на этапе написания кода в несколько раз дешевле, чем после релиза;
- как защитить свой продукт от уязвимостей и соответствовать стандартам;
- реальные истории компаний, которые внедрили PVS-Studio, и как это отразилось на качестве продукта.
Приглашаем подписаться!
А еще, на всякий случай, у нас появился канал в MAX.
Смотрю ещё один вайб проект, про который потом напишу статью. Что-бы быть в ней максимально точным, прошу помочь читателей.
По мнению ИИ вот этот код с вложенным циклом является SIMD-friendly. Предполагается, что потенциально он может быть лучше оптимизирован, так как компилятор увидит, что обработка идёт цепочками по 8 байт и как-то воспользуется этим.
Моё мнение – это фигня какая-то. Моя нейросеть (интуиция) подсказывает, что этот код для компилятора ничем не лучше, чем его простейшая реализация с одним циклом:
bool IsSpanBlank_simple(const char* data, size_t len) {
for (size_t i = 0; i < len; ++i) {
unsigned char c = static_cast<unsigned char>(data[i]);
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') {
return false;
}
}
return true;
}
Хочу убедиться в своей правоте. Мне кажется, нет компилятора и ключей оптимизации, при которых будет построен особенно эффективный код (например, с использованием SSE) для версии с вложенным циклом, но при этом тоже самое не будет сделано для короткой версии.
На своих замерах я пока вообще получаю, что "оптимизированная" версия с вложенным циклами работает медленнее, чем с 1 циклом. Есть более быстрые варианты, основанные на сдвигах и явных интристиках, но они сейчас не интересны. Речь именно на предложенную "оптимизацию" с вложенным циклом.
Призываю экспертов оптимизации. Кто прав, а кто нет?Repost from PVS-Studio: поиск ошибок в коде
Друзья, мы обновили нашу книгу по ГОСТ Р 71207!
Теперь там рассматривается не только этот ГОСТ, а также ГОСТ Р 56939, приказ ФСТЭК №117.
Что полезного можно найти:
- требования к инструментам статического анализа;
- какие ошибки они должны находить;
- понятие критической ошибки;
- какие технологии должны реализовывать анализаторы;
- процесс регулярного использования;
- взаимосвязи c ГОСТ Р 56939—2024 и приказом ФСТЭК №117;
- испытания статических анализаторов в 2025 году;
и многое другое.
Получить книгу можно по этой ссылке 👈🏻
#гост #фстэк #PVS_Studio #книга
Подытожил в статье итоги обзора кода "проекта" Vib-OS.
Давайте заглянем в этот самый вайб-код.
Repost from PVS-Studio: поиск ошибок в коде
Продолжаем изучать возможности статического анализатора в рамках серии вебинаров ❤️
В новой части:
- Запуск анализатора из командной строки (CLI).
- Использование PVS-Studio в Docker-контейнерах.
- Интеграция в процессы CI/CD.
- Обзор утилит Plog Converter и Blame Notifier.
🗓26 марта в 14:00
Регистрация по ссылке 🔗
Присоединяйтесь! Будет интересно!
P.s. если не сможете подключиться в этот день - не беда! Всем зарегистрировавшимся мы отправим запись
#вебинар #PVS_Studio
Repost from Новости информационной безопасности
Приглашаем на вебинар «Автоматизация анализа с помощью PVS-Studio»
Статический анализатор — мощный, но не всегда простой инструмент. Серия вебинаров «Знакомство с PVS-Studio» поможет разобраться в различных вопросах: от установки анализатора до встраивания в CI/CD и тонких настроек.
В части про автоматизацию анализа расскажут о том, как встроить PVS-Studio в рабочий процесс разработки и минимизировать ручную работу.
В программе:
— Запуск анализатора из командной строки (CLI).
— Использование PVS-Studio в Docker-контейнерах.
— Интеграция в процессы CI/CD.
— Обзор утилит Plog Converter и Blame Notifier.
Когда: 26 марта 14:00
Подробности и регистрация по ссылке.
Механизмы в SAST-решениях для выявления дефектов из OWASP Top Ten
На вебинаре вместе с Лукой Сафоновым, лидером российского отделения консорциума OWASP, разобрали OWASP Top Ten. Поговорили о том, почему так важно проверять исходный код на наличие потенциальных уязвимостей и как с этой задачей помогают справляться SAST-инструменты. А также рассмотрели механизмы, которые позволяют выявлять потенциальные уязвимости и дефекты безопасности.
Бонусный вебинар. Сертификация процессов РБПО: требования ФСТЭК России, новые стандарты и практика.
Финальный вебинар масштабного цикла «Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024» прошёл при участии ведущих экспертов: Дмитрия Шмойлова, Алексея Щербакова и Виталия Вареницы.
Ещё пример. Функция
bt_set_local_name просто перекладывает строку в буфер размером 248 байт и передаёт её в hci_send_cmd.
int bt_set_local_name(const char *name)
{
uint8_t params[248] = {0};
int len = 0;
while (name[len] && len < 247) {
params[len] = name[len];
len++;
}
return hci_send_cmd(HCI_OP_WRITE_LOCAL_NAME, params, 248);
}
Посмотрим, что происходит со строкой дальше:
static int hci_send_cmd(uint16_t opcode, void *params, uint8_t plen)
{
uint8_t buf[256];
buf[0] = HCI_COMMAND_PKT;
struct hci_command_hdr *hdr = (struct hci_command_hdr *)&buf[1];
hdr->opcode = opcode;
hdr->plen = plen;
if (plen > 0 && params) {
for (int i = 0; i < plen; i++) {
buf[4 + i] = ((uint8_t *)params)[i];
}
}
/* TODO: Send via USB bulk endpoint */
printk(KERN_DEBUG "BT: Send cmd opcode=0x%04x len=%d\n", opcode, plen);
return 0;
}
Формируется новый буфер из специального заголовка и переданной строки. Дальше этот буфер пока не используется, но суть не в этом. Непонятно, зачем вообще был нужен промежуточный буфер в bt_set_local_name. Код можно сократить, попутно ускорив его, убрав одно копирование.В комментариях к предыдущему посту написали, что
memcpy не проверяет завершающий ноль, поэтому плохо подходит для копирования строк. Это так, но я имел в виду, что в рассматриваемом проекте вообще очень много копирования данных "вручную", не являющихся строками. Постоянно встречается код вида:
uint8_t *src = buf + offset_in_block;
uint8_t *dst = (uint8_t *)inode;
for (size_t i = 0; i < sizeof(struct ext4_inode); i++) {
dst[i] = src[i];
}
uint8_t *src = sb_buf;
uint8_t *dst = (uint8_t *)&fs->sb;
for (size_t i = 0; i < sizeof(struct ext4_superblock); i++) {
dst[i] = src[i];
}
uint8_t *src = (uint8_t *)ptr;
uint8_t *dst = (uint8_t *)new_ptr;
for (size_t i = 0; i < old_size; i++) {
dst[i] = src[i];
}
Все эти четверостишия могут быть заменены на один вызов memcpy.Ещё на тему разбухшего vibe-кода. Смотрю проект Vib-OS. Потом про него статья будет. Это очень маленький проект, если убрать сторонние сущности и различные ресурсы, хранящиеся в виде массивов в коде. По делу там около 35 тысяч строк кода в 110 файлах.
Так вот, на эти 110 файлов я как начитал как минимум 4 одинаковых функции копирования строк.
static void str_copy(char *dst, const char *src, int max) {
int i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static void str_cpy(char *dst, const char *src, int max) {
int i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static void strcpy_safe(char *dst, const char *src, size_t max) {
size_t i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static inline char *strncpy_safe(char *dst, const char *src, size_t n) {
size_t i;
for (i = 0; i < n - 1 && src[i]; i++) {
dst[i] = src[i];
}
dst[i] = '\0';
return dst;
}
Видимо у ИИ который это делал, любимый напев – I Like to Move It, Move It :) Частое (местами совершенно бестолковое) копирование массивов. Причём реализованное циклами, а не через memcpy.