Пример, как идеология педантичности стандарта MISRA C защищает от ошибок
В C литерал
V2648 Use NULL macro instead of literal zero for pointers.
Если заменить некоторые
Правило, кажется, просто украшательством стиля написания кода. Лишнее ограничение при написании кода... Какой практический прок? Давайте посмотрим, как такое предупреждение помогает выявить реальную ошибку.
Обратите внимание на тип переменной
Благодаря осмотрительной педантичности найдена реальная ошибка.
На самом деле, PVS-Studio и раньше эту ошибку находил с помощью другой диагностики – V527 It is odd that the '\0' value is assigned to 'char' type pointer. Но здесь именно хотелось продемонстрировать, как работают и помогают MISRA правила. Вообще ситуация, что один и тот-же баг выявляется разными детекторами, вполне частая ситуация и удивляться этому не стоит.
Почему я про MISRA вспомнил?
Во-первых, мои коллеги сейчас занимаются подготовкой квалификационного пакета PVS-Studio согласно ГОСТ Р МЭК 61508 и ГОСТ Р ИСО 26262 по поддержке MISRA C:2012 и MISRA C:2023.
Во-вторых, 23 сентября я буду с докладом "Анализатор PVS-Studio как средство достижения целей верификации ГОСТ Р ИСО 26262-6" на форуме "Безопасность транспортных средств". Приглашаю посетить мероприятие и мой доклад.
В C литерал
0 можно присваивать как численным типам, так и указателю (вместо NULL). Правило MISRA C 2012/2023 11.9, которое говорит, что нужно использовать именно NULL, может казаться избыточным. Например, здесь:typedef struct FT_Outline_
{
short n_contours; /* number of contours in glyph */
short n_points; /* number of points in the glyph */
FT_Vector* points; /* the outline's points */
char* tags; /* the points flags */
short* contours; /* the contour end points */
int flags; /* outline masks */
} FT_Outline;
....
static const FT_Outline null_outline = { 0, 0, 0, 0, 0, 0 };
V2648 Use NULL macro instead of literal zero for pointers.
Если заменить некоторые
0 на NULL никому лучше не станет.static const FT_Outline null_outline = { 0, 0, NULL, NULL, NULL, 0 };Правило, кажется, просто украшательством стиля написания кода. Лишнее ограничение при написании кода... Какой практический прок? Давайте посмотрим, как такое предупреждение помогает выявить реальную ошибку.
typedef char FAR * FAR * png_charpp;
....
png_size_t
png_check_keyword(...., png_charpp new_key)
{
....
if (key_len > 79)
{
png_warning(....);
new_key[79] = '\0'; // <= V2648
key_len = 79;
}
....
}
Обратите внимание на тип переменной
new_key – это указатель на указатель. Из-за опечатки, терминальный ноль обнуляет указатель, а не записывается в строку. Правильный вариант кода:(*new_key)[79] = '\0';Благодаря осмотрительной педантичности найдена реальная ошибка.
На самом деле, PVS-Studio и раньше эту ошибку находил с помощью другой диагностики – V527 It is odd that the '\0' value is assigned to 'char' type pointer. Но здесь именно хотелось продемонстрировать, как работают и помогают MISRA правила. Вообще ситуация, что один и тот-же баг выявляется разными детекторами, вполне частая ситуация и удивляться этому не стоит.
Почему я про MISRA вспомнил?
Во-первых, мои коллеги сейчас занимаются подготовкой квалификационного пакета PVS-Studio согласно ГОСТ Р МЭК 61508 и ГОСТ Р ИСО 26262 по поддержке MISRA C:2012 и MISRA C:2023.
Во-вторых, 23 сентября я буду с докладом "Анализатор PVS-Studio как средство достижения целей верификации ГОСТ Р ИСО 26262-6" на форуме "Безопасность транспортных средств". Приглашаю посетить мероприятие и мой доклад.
👏5
"Лаборатория Касперского" разрабатывает микроядерную операционную систему KasperskyOS в соответствии с принципом Secure by Design (конструктивная безопасность). Этот принцип предполагает, что защищённость системы закладывается на уровне её архитектуры. К качеству и надёжности операционной системы предъявляются высокие требования, а доверенные компоненты проходят тщательную проверку, одним из этапов которой является статический анализ кода.
"Лаборатория Касперского" использует PVS-Studio в разработке операционной системы KasperskyOS с 2016 года. За это время некоторые обращения разработчиков в нашу поддержку превратились в новые функции анализатора, доступные теперь всем пользователям PVS-Studio. Разбираем пять таких случаев и показываем, как обратная связь корпоративного клиента влияет на развитие продукта.
"Лаборатория Касперского" использует PVS-Studio в разработке операционной системы KasperskyOS с 2016 года. За это время некоторые обращения разработчиков в нашу поддержку превратились в новые функции анализатора, доступные теперь всем пользователям PVS-Studio. Разбираем пять таких случаев и показываем, как обратная связь корпоративного клиента влияет на развитие продукта.
🔥6
Кажется, я ментально синхронизировался с миром РБПО. Сегодня на РБПО.рф опубликовали карту инструментов РБПО. Дело в том, что несколько предыдущих дней мы занимались приблизительно тем же самым.
Так что теперь две подборки :)
Наш вариант — Список инструментов для РБПО.
Так что теперь две подборки :)
Наш вариант — Список инструментов для РБПО.
🔥4👍1
2026_09_23_Андрей_Карпов_Безопасность_транспортных_средств_PVS_Studio.pdf
772.8 KB
На днях выступал с докладом на форуме "Безопасность транспортных средств", организованном компанией "Экварта". Записи докладов пока нет, поэтому пока выкладываю свою презентацию: Анализатор PVS-Studio как средство достижения целей верификации ГОСТ Р ИСО 26262-6.
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня коллега демонстрирует, как визуально проявляют себя баги в Java коде: Нашёл ошибки в моде Create и проверил их в игре
В этой статье мы разберём ошибки в одном из самых популярных модов для Minecraft — Create. Посмотрим, как они проявляются прямо в игре, и отправим пулл-реквесты с исправлениями.
🔥3👍1
В целях нетворкинга и просто так приглашаю коннектиться в TenChat — что-то типа LinkedIn. Ссылка на мой профиль: https://m.tenchat.ru/u/uIMxo8j8
Напоминаю, что мы подготовили подборку материалов и вебинаров по теме процессов разработки безопасного ПО (РБПО) по ГОСТ Р 56939-2024.
ГОСТ56939.РФ
ГОСТ56939.РФ
🔥2
Вышел новый пресс-релиз про PVS-Studio — 8.01. В нём: расширение поддержки OWASP, поддержка новых версий Java и Go и многое другое.
👍2
Обзор нововведений в C# 15. Union-типы, закрытые иерархии, именованные break и continue, индексаторы расширений, аргументы выражения коллекции, безопасность памяти.
👍4
Всем привет, давно не писал, завайбкодился... А вы думаете я не вайбкодю? Ещё как, надо ведь понимать, как это и куда ведёт, чтобы развивать/создавать инструменты контроля всего этого :) Но про наблюдения будет следующий пост, а сейчас хочу поделиться 2 ссылками.
1) У нас появился совместный бандл с СВД ВС. По ссылке можно узнать стоимость бандла и посмотреть запись вебинара «Применение ЗОСРВ „Нейтрино“ и PVS-Studio для разработки ПО согласно требованиям МЭК 61508».
2) PVS-Studio включили в АТЛАС МедТех 2026. Смотри раздел VII - класс 17 - Решения и компетенции по информационной безопасности и инфраструктуре, применяемые в ИСЗ.
1) У нас появился совместный бандл с СВД ВС. По ссылке можно узнать стоимость бандла и посмотреть запись вебинара «Применение ЗОСРВ „Нейтрино“ и PVS-Studio для разработки ПО согласно требованиям МЭК 61508».
2) PVS-Studio включили в АТЛАС МедТех 2026. Смотри раздел VII - класс 17 - Решения и компетенции по информационной безопасности и инфраструктуре, применяемые в ИСЗ.
Наблюдение натуралиста за миром вайб-кодинга
Я экспериментирую с агентской разработкой, чтобы понимать какие новые проблемы она несёт. ИИ не делает ошибки и опечатки в стиле человека, но кажется быстро ведёт проект в сторону запутанности/монолита. Я прочувствовал этот момент на недавнем случае.
Есть проект, что-то типа анализатора кода. При его написании используется стандарт кодирования, адаптированный под ИИ.
Работаем над поиском определённого негативного паттерна в коде. Я объясняю ИИ, что определённый вариант кода вполне уместен – так пишут, в общем всё хорошо, давай исключение сделаем. ИИ: да, понял, код хороший, переделываем. И поправил разное.
Смотрю diff, а там, помимо прочего, изменённый файл стандарта кодирования! Что? Заглядываю – там вписано, что вот этот странный паттерн кода считается теперь одним из образцов для подражания. Facepalm.
Я экспериментирую с агентской разработкой, чтобы понимать какие новые проблемы она несёт. ИИ не делает ошибки и опечатки в стиле человека, но кажется быстро ведёт проект в сторону запутанности/монолита. Я прочувствовал этот момент на недавнем случае.
Есть проект, что-то типа анализатора кода. При его написании используется стандарт кодирования, адаптированный под ИИ.
Работаем над поиском определённого негативного паттерна в коде. Я объясняю ИИ, что определённый вариант кода вполне уместен – так пишут, в общем всё хорошо, давай исключение сделаем. ИИ: да, понял, код хороший, переделываем. И поправил разное.
Смотрю diff, а там, помимо прочего, изменённый файл стандарта кодирования! Что? Заглядываю – там вписано, что вот этот странный паттерн кода считается теперь одним из образцов для подражания. Facepalm.
💯5😁2
Продолжение
Для меня, задача которую мы делали и правка стандарта кодирования – сущности из разных галактик. Я даже представить не мог, что вот так задеть может. А с точки зрения ИИ – никаких проблем, всё едино – там код, тут код. Там этот код ok, значит и тут ok.
Хорошо, что я просто не нажал ok, на вроде простой задаче и не заложил файлы.
Кажется я понял, как будут происходить крушения программных проектов, где ИИ фигачит код без особого контроля. Это напоминает серию Симпсонов, где на атомной станции произошла авария из-за упавшей игрушки, которая нажимала Yes. Только здесь наоборот, аварии будут там, где как раз Yes нажимается твёрдо, чётко, регулярно. А ведь это так соблазнительно, ведь вроде работает. В общем интересно, продолжаю наблюдения.
Для меня, задача которую мы делали и правка стандарта кодирования – сущности из разных галактик. Я даже представить не мог, что вот так задеть может. А с точки зрения ИИ – никаких проблем, всё едино – там код, тут код. Там этот код ok, значит и тут ok.
Хорошо, что я просто не нажал ok, на вроде простой задаче и не заложил файлы.
Кажется я понял, как будут происходить крушения программных проектов, где ИИ фигачит код без особого контроля. Это напоминает серию Симпсонов, где на атомной станции произошла авария из-за упавшей игрушки, которая нажимала Yes. Только здесь наоборот, аварии будут там, где как раз Yes нажимается твёрдо, чётко, регулярно. А ведь это так соблазнительно, ведь вроде работает. В общем интересно, продолжаю наблюдения.
👍3🔥1