Обновить
293.1
PVS-Studio
Статический анализ кода для C, C++, C# и Java
Сначала показывать

Стоматологические услуги для компиляторов на примере LLVM 21

Многие слышали миф о маленьких птичках, "чистящих зубы" крокодилам. И пусть в живой природе этого не найти, но зато в мире программ есть свои герои, способные помочь ещё более могучим ящерам — драконам в лице компиляторов. Ну или в нашем случае виверне, ведь именно она на логотипе LLVM, чья очередная версия попала под чистку от багов.

Среди сегодняшних процедур: рытьё истории коммитов, чтение технических спецификаций и краткий румтур по совершенно разным уголкам проекта LLVM — от принтеров дебаг информации до оптимизатора и работы с регистрами.

Например, коснёмся инструкции CPUID:

Предупреждение PVS-Studio: V560 A part of conditional expression is always false: AVX10Ver >= 2. Host.cpp 2177

StringMap<bool> sys::getHostCPUFeatures() {
  unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0;
  ....
  bool HasLeaf24 = MaxLevel >= 0x24
                && !getX86CpuIDAndInfo(0x24, &EAX, &EBX, &ECX, &EDX);

  int AVX10Ver = HasLeaf24 && (EBX & 0xff);
  Features["avx10.1"] = HasAVX10 && AVX10Ver >= 1;
  Features["avx10.2"] = HasAVX10 && AVX10Ver >= 2;
  return Features;
}

В выражении HasLeaf24 && (EBX & 0xff) сперва оба операнда && приведутся к типу bool, вычислится логическое "И", а затем результат снова расширится до типа int. На выходе получаем значение 0 или 1, и выражение AVX10Ver >= 2 всегда будет вычисляться как false.

Опечатка, ошибка в логике или кривой мёрж? Git blame и спецификация помогут ответить на этот вопрос, как и на многие другие, если вас заинтересовало – продолжение читайте в статье.

Теги:
+1
Комментарии0

Коллега обнаружил забавный момент, который идёт в копилку "PVS-Studio — двигатель прогресса".

Слышали ли вы про то, что злобные C и C++ компиляторы могут удалить вызов memset в конце функции во время оптимизаций? У нас даже про это есть диагностика V597.

Это давно известная, но при этом живучая потенциальная уязвимость CWE-14: Compiler Removal of Code to Clear Buffers. В следующем коде компилятор удалит заполнение памяти нулями (вызов memset), так как после этого буфер не используется. Раз не используется, то заполнение буфера с точки зрения языка C++ не имеет каких-либо наблюдаемых эффектов и, следовательно, является лишим. Т. е. его можно и нужно удалить с целью оптимизации.

void sha1_hmac( unsigned char *key, int keylen,
                unsigned char *input, int ilen,
                unsigned char output[20] )
{
  sha1_context ctx;

  sha1_hmac_starts( &ctx, key, keylen );
  sha1_hmac_update( &ctx, input, ilen );
  sha1_hmac_finish( &ctx, output );

  memset( &ctx, 0, sizeof( sha1_context ) );
}

Код позаимствован из статьи про проверку проекта PPSSPP.

Проблема насущная, и для её решения в стандарт C23 внесли новую функцию memset_explicit, которая теперь обязательна для реализации в стандартной библиотеке вместо memset_s. Так вот, автор предложения (Miguel Ojeda, P1315) в своём документе сослался на нашу диагностику (ссылка N3).

И похоже, что он давно про нас знает, т. к. умудрился вставить ссылку ещё аж на старый сайт viva64.

Не зря столько лет говорим про memset. Приятно, что нас уже в proposal-ы затаскивают :)

Теги:
+18
Комментарии2

Прошло 20 из 25 вебинаров из цикла! Мы уже на финишной прямой!

Зарегистрироваться на следующие вебинары можно по этой ссылке.

А пока можно освежить память и посмотреть предыдущие 5 выпусков:

Вебинар 16. Использование инструментов композиционного анализа

Вебинар 17. Проверка кода на предмет внедрения вредоносного программного обеспечения через цепочки поставок

Вебинар 18. Функциональное тестирование

Вебинар 19. Нефункциональное тестирование

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

Присоединяйтесь к путешествию вокруг РБПО вместе с нами! ❤️

Теги:
0
Комментарии0

Что такое Cyber Resilience Act, и какие требования к кибербезопасности он предъявляет?

Что же за птица такая — Cyber Resilience Act? Мы написали статью, где рассмотрели закон, который выдвигает требования кибербезопасности к продуктам, поставляемым на европейский рынок. Как выглядят эти требования, какие определены штрафы за их несоблюдение — обо всём поговорим здесь.

Теги:
+2
Комментарии0

Новый выпуск подкаста "Разбаговка"!

В этот раз вместе с Event-менеджерами обсудили, зачем нужны мероприятия продуктовой IT-компании. Мы поделились своим опытом организации митапов и участия в крупных конференциях. Выпуск получился интересным и лёгким.

Приглашаем к просмотру и ждём ваши комментарии!

Теги:
+2
Комментарии0

Предлагаю вашему вниманию запись вебинара "Особенности разработки встроенного ПО по требованиям ФБ". Слайды презентаций.

Вместе с экспертами из "ФанкСэйфети" разбирались с такими сущностями, как ГОСТ Р МЭК 61508, уровнями SIL, стандартом MISRA C, сертификацией по функциональной безопасности и т. д.

В конце была активная дискуссия, во время которой отвечали на интересные вопросы. По её итогу приводим дополнительную информацию и ссылки.

Примечание 1. Говоря про безопасные и сертифицированные компиляторы, стоит отметить, что в 2024 году появился ГОСТ Р 71206-2024: "Разработка безопасного программного обеспечения. Безопасный компилятор языков С/С++. Общие требования". Также см. пост из цикла разбора РБПО: Процесс 12 — Использование безопасной системы сборки программного обеспечения и вебинар на эту тему.

Примечание 2. Инструменты SAST и DAST не обязаны быть сертифицированы. Из методической рекомендация ФСТЭК № 2025-07-011 | Уровень критичности: 3:

Область: Инструментальный анализ

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

Описание: В настоящий момент ФСТЭК России не предъявляет требования наличия сертификата соответствия к большинству типов инструментов анализа кода и архитектуры. При этом к инструментам предъявляются следующие требования: ...

См. также выдержку из эфира AM Live "Разработка безопасного программного обеспечения (РБПО)". Анализатор PVS-Studio участвует в инициативе ФСТЭК по испытаниям статических анализаторов кода, но это другая история.

Примечание 3. Был вопрос, связанный с объединением требований ФБ и ИБ в одном стандарте. Некоторые усилия в этом направлении предпринимаются, см. примеры ГОСТов ниже:

ГОСТ Р 59506-2021/IEC TR 63074:2019. Безопасность машин. Вопросы защиты информации в системах управления, связанных с обеспечением функциональной безопасности.

ГОСТ Р 71452-2024/IEC/PAS 63325:2020. Требования к функциональной безопасности и защите системы контроля промышленной автоматизации (IACS) на протяжении жизненного цикла.

Однако необходимо понимать, что у ФБ и ИБ разные цели и разные подходы, поэтому объединение технических требований может создать путаницу, и сейчас меры по объединению некоторых аспектов ФБ и ИБ носят, прежде всего, организационный характер.

Теги:
0
Комментарии0

Как анализировать C и C++ код без привязки к сборочной системе на Windows

Код, написанный на C и C++, может использоваться для самых разных целей. И под каждые из этих целей есть свои инструменты сборки. Например, при разработке программного обеспечения для встраиваемых систем используются специальные компиляторы и сборочные системы.

Иногда бывает так, что появляется целый "зоопарк" самописных скриптов сборки, а его последний "смотритель" уволился ещё в прошлом году (играет Гражданская Оборона — "Зоопарк").

Хотелось бы всё равно как-то анализировать такой код без необходимости разбираться в хрупкой и непонятной системе сборки. Что же делать?

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

В новой статье посмотрим, как воспользоваться этим механизмом для ОС Windows в анализаторе PVS-Studio, и  как сделать его использование в процессе разработки удобным.

Теги:
+4
Комментарии0

Оптимизация игр: работа со строками

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

Поэтому приглашаем вас на второй вебинар!

Поговорим о работе со строками с экспертами из индустрии:

  • поделимся удачными (и не очень) историями развития собственных решений

  • расскажем о пулах строк и способах экономии памяти

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

📅4 декабря
⏰ 15:00

Подробная программа и регистрация доступны по ссылке. Присоединяйтесь и приглашайте коллег!

Теги:
0
Комментарии0

Статья "Код блокчейн-проектов Neo и NBitcoin VS анализатор кода. Кто-кого?"

PVS-Studio ворвался в мир блокчейн-разработки, и первыми "под удар" попали open source проекты на C# — Neo и NBitcoin!

В статье мы рассмотрели самые интересные ошибки: как явные, так и потенциальные, которые нашли в этом проекте. Если вам интересно, какие ошибки могут находить такие инструменты, как PVS-Studio, или вы желаете прокачать свой собственный "ментальный анализатор", приглашаю к прочтению :)

Теги:
+6
Комментарии0

Статический анализ OpenIDE

Коллеги из OpenIDE предложили нам проверить их продукт статическим анализатором и написать об этом статью.

Мы отобрали самые интересные ошибки и странные моменты, которые нашёл анализатор в исходном коде используемой ими IntelliJ Platform. Если вам интересно посмотреть на ошибки в Java коде и освежить в памяти некоторые теоретические аспекты этого языка, крайне рекомендуем статью к прочтению.

P.S. Отдельная благодарность OpenIDE. Они рассмотрели приведённые в статье ошибки и поправили их.

Теги:
+1
Комментарии0

.NET Digest #9

Рады вам представить девятый выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET!

В этот раз мы расскажем про новые preview и RC версии .NET 10 и новую Visual Studio 2026. А ещё мы собрали для вас несколько интересных статей:

  • про производительность в .NET от Стивена Тауба;

  • спонсорство на NuGet.org;

  • и статистику популярности языков от GitHub.

Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов! Подробнее читайте в нашей статье.

Теги:
+4
Комментарии0

ГОСТ Р МЭК 61508, SIL (УПБ), MISRA C...

Хотите лучше разбираться в этих стандартах? Приходите на наш вебинар 20 ноября!

Требования функциональной безопасности (ФБ) по ГОСТ Р МЭК 61508 — это не просто формальность, а сложный квест для всей команды разработки. На вебинаре вместе с коллегами из FuncSafety мы разберем "подводные камни" этого процесса.

Спикеры:

  • Андрей Карпов, сооснователь PVS-Studio

  • Елена Рогова, ведущий специалист по функциональной безопасности и надежности

  • Андрей Рогов, руководитель, архитектор и разработчик встраиваемых систем

📅20 ноября в 15:00

Регистрация и подробности по ссылке.

Теги:
0
Комментарии0

Посоревнуйся с анализатором!

Мы нашли ошибки в коде проекта LLVM. Вот одна из них. Попробуй найти, ответ пиши в комментариях.

Теги:
Рейтинг0
Комментарии5

Что такое OpenIDE? Чем IntelliJ лучше, чем Visual Studio Code? JetBrains будет обучать нейросети на нашем коде?

Эти и многие другие вопросы обсудили в нашем подкасте "Разбаговка" вместе с Фёдором Сазоновым, CEO OpenIDE.

Приглашаем к просмотру и ждём ваши комментарии!

Также подкаст можно послушать/посмотреть на этих площадках:

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

"Нулевая терпимость" к ошибкам в коде

А что, если внедрить в проекте "нулевую терпимость" к багам?

Приглашаем вас на вебинар "Статический анализ и ASOC: нулевая терпимость к ошибкам в проекте"!

Мы не просто поговорим о качестве кода, а сформулируем чёткий принцип "нулевой терпимости" к ошибкам и покажем, как статический анализатор становится его технической основой.

Что вас ждёт:

  • На примере C#-проекта продемонстрируем, как инструмент выявляет критические дефекты, уязвимости и code smells до момента попадания кода в репозиторий.

  • Разберём практические аспекты интеграции с CyberCodeReview для автоматизации контроля качества, включая запуск анализа по триггерам из CI и автоматическое создание задач в Jira.

  • Дадим рекомендации по настройке и внедрению процесса, которые помогут вашей команде сократить затраты на исправление ошибок и повысить надёжность ПО.

13 ноября в 15:00 (МСК)

Ссылка на регистрацию тут. До встречи!

Теги:
Рейтинг0
Комментарии0

Друзья, уже прошло 15 вебинаров из цикла "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024". Спасибо за ваш интерес и участие!

Делимся выпусками 11-15. Будем рады вашей обратной связи! Приятного просмотра!

Вебинар 11. Динамический анализ кода программы

Вебинар 12. Использование безопасной системы сборки программного обеспечения

Вебинар 13. Обеспечение безопасности сборочной среды программного обеспечения

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

Вебинар 15. Обеспечение безопасности используемых секретов

Регистрация на следующие вебинары доступна по ссылке. Присоединяйтесь к путешествию вокруг РБПО вместе с нами!

Теги:
Рейтинг0
Комментарии0

Друзья, уже прошло 10 из 25 вебинаров из цикла "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024". Спасибо за ваш интерес и участие!

Делимся выпусками 6-10. Приятного просмотра!

6. Разработка, уточнение и анализ архитектуры программного обеспечения

7. Моделирование угроз и разработка описания поверхности атаки

Бонусный вебинар. Сертификация ПО согласно требованиям ФСТЭК и Минобороны

8. Формирование и поддержание в актуальном состоянии правил кодирования

9. Экспертиза исходного кода

10. Статический анализ исходного кода

Впереди еще 15 вебинаров! Регистрация на них доступна по ссылке 🔗

Теги:
Рейтинг0
Комментарии0
1

Информация

Сайт
pvs-studio.ru
Дата регистрации
Дата основания
2008
Численность
51–100 человек
Местоположение
Россия
Представитель
Андрей Карпов