Forwarded from PVS-Studio: поиск ошибок в С/С++, С# и Java
Команда PVS-Studio подготовила для вас необычный конкурс!
Связан он с вашими эпичными или мемными фейлами при написании кода. Это тот случай, когда за ошибку вы получите не нагоняй от тимлида, а крутой подарок!
Все подробности по ссылке https://habr.com/ru/companies/pvs-studio/articles/775388/
Связан он с вашими эпичными или мемными фейлами при написании кода. Это тот случай, когда за ошибку вы получите не нагоняй от тимлида, а крутой подарок!
Все подробности по ссылке https://habr.com/ru/companies/pvs-studio/articles/775388/
Хабр
Конкурс для C++ программистов и их любимых багов
Привет всем крутым C и С++ разработчикам! Команда PVS-Studio на связи. Новый год не за горами, поэтому мы подготовили вам новый конкурс с призами! Все мы люди, всем свойственно ошибаться. Обычно за...
🔥1
Forwarded from PVS-Studio: поиск ошибок в С/С++, С# и Java
Тук-тук… А мы с новостями! Да еще с какими!
Рады сообщить, что совсем скоро вас ждет интересный вебинар. Мы расскажем, как с помощью статического анализатора кода PVS-Studio избежать ошибки на проде и постоянные задержки релиза.
Вебинар пройдет 1 февраля в 14:00 📌
Зарегистрироваться можно по ссылке - https://pvs-studio.ru/ru/webinar/
Ждём вас! 😉
Рады сообщить, что совсем скоро вас ждет интересный вебинар. Мы расскажем, как с помощью статического анализатора кода PVS-Studio избежать ошибки на проде и постоянные задержки релиза.
Вебинар пройдет 1 февраля в 14:00 📌
Зарегистрироваться можно по ссылке - https://pvs-studio.ru/ru/webinar/
Ждём вас! 😉
🔥3
Решил переиспользовать старый канал, посвящённый мероприятиям программистов. Буду размещать здесь свои наблюдения из мира программирования, багов, языка C++ и качества кода. А чтобы быть в курсе предстоящих конференций, приглашаю посетить специализированный раздел нашего сайта Мероприятия для программистов.
👍2
Подал заявку на конференцию SafeCode, посвящённую инструментами и практике безопасной разработки. В ходе демонстрационного доклада программный комитет усомнился, что ошибка использования memset, действительно была найдена нами в LLVM :). Не верится, что разработчики компилятора, могут местами аргументы функции перепутать. Могут. Сейчас нашёл старую публикацию и соответствующий commit с правкой бага. Вставлю в презентацию в качестве proof-а :)
Даже высококвалифицированные разработчики не застрахованы от простых ошибок и опечаток.
Даже высококвалифицированные разработчики не застрахованы от простых ошибок и опечаток.
🔥5👍2
Не люблю макросы по разным причинам. Одна из них, что они сильно разрывают восприятие программы. Вот хороший пример сейчас встретил в проекте DPDK: по отдельности код смотрится нормально, а вместе фигня получается :)
Блок кода из юнит-тестов – вроде OK.
Макрос MAX_NUM тоже на первый взгляд нормальный.
Однако, при подстановке получаем: 1 << 20 / 2. Приоритет операции деления выше, чем сдвига. Получаем: 1 << 10. Каждый из циклов перебирает не 1048576 варианта, а только 1024. Итого, тест проверяет только одну миллионную часть от того, что должен :)
На ревью такое заметить можно, но сложно. Нужно явно посмотреть, во что макрос раскрывается и ещё в голове подстановку сделать.
Спасибо PVS-Studio за предупреждение V634. Но лучше не макросы, а константные переменные использовать или constexpr в C++.
Блок кода из юнит-тестов – вроде OK.
Макрос MAX_NUM тоже на первый взгляд нормальный.
Однако, при подстановке получаем: 1 << 20 / 2. Приоритет операции деления выше, чем сдвига. Получаем: 1 << 10. Каждый из циклов перебирает не 1048576 варианта, а только 1024. Итого, тест проверяет только одну миллионную часть от того, что должен :)
На ревью такое заметить можно, но сложно. Нужно явно посмотреть, во что макрос раскрывается и ещё в голове подстановку сделать.
Спасибо PVS-Studio за предупреждение V634. Но лучше не макросы, а константные переменные использовать или constexpr в C++.
👍1
Бестиарий программирования
1 << 20 / 2
Вчера немного поспешил с числами.
(1 << (20 / 2)) * (1 << (20 / 2)) = 1024 * 1024 = 1048576
((1 << 20) / 2) * ((1 << 20) / 2) = 524288 * 524288 = 274877906944
274877906944/1048576 = 262144
Так что перебирается не в миллион раз меньше комбинаций, а 250 тысяч :)
Впрочем, суть ошибки это не меняет. Кстати, если её исправить, возможно проявится другая проблема с тестов. Вернее, выяснится, что он работает слишком медленно и его надо переделывать.
(1 << (20 / 2)) * (1 << (20 / 2)) = 1024 * 1024 = 1048576
((1 << 20) / 2) * ((1 << 20) / 2) = 524288 * 524288 = 274877906944
274877906944/1048576 = 262144
Так что перебирается не в миллион раз меньше комбинаций, а 250 тысяч :)
Впрочем, суть ошибки это не меняет. Кстати, если её исправить, возможно проявится другая проблема с тестов. Вернее, выяснится, что он работает слишком медленно и его надо переделывать.
🔥1
Выложили подкаст, в котором я недавно участвовал. Приятного всем прослушивания и спасибо организаторам.
P.S. Если кто-то делает подкасты/вебинары программисткой направленности, то знайте, команда PVS-Studio всегда открыта к сотрудничеству.
P.S. Если кто-то делает подкасты/вебинары программисткой направленности, то знайте, команда PVS-Studio всегда открыта к сотрудничеству.
Forwarded from PVS-Studio: поиск ошибок в С/С++, С# и Java
В новом выпуске обсудили, с чего начиналась разработка статического анализатора PVS-Studio и как работает команда сегодня.
Приятного просмотра!
Послушать подкаст можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
VK Видео
Статический анализ кода / Виды анализа и диагностики / Поиск кадров в регионах
В гостях у «Битовых масок» — Андрей Карпов и Юрий Минаев из PVS-Studio. В новом выпуске инженеры рассказывают о том, с чего начиналась разработка статического анализатора PVS-Studio и как работает команда сегодня. Как устроен статический анализ и в чем главные…
Годы идут, а ошибки затирания приватных данных по прежнему прекрасно себя чувствуют и процветают. Очередное гнездо я встретил в DPDK. Суть в том, что если после memset буфер памяти не используется, то и заполнять его не обязательно. Компиляторы удаляют вызов memset. Нужно использовать memset_s, RtlSecureZeroMemory или их аналогии. Подробнее: V597, CWE-14.
👍3😱1
Если попросить программиста назвать типовые ошибки, то скорее всего он назовёт неинициализированные переменные, деление на 0, разыменование нулевого указателя. Но насколько то, что сразу приходит в голову, в действительности часто можно встретить к коде? Чего больше: ошибок выхода за границу массива или опечаток вида if (A == A)? Интересные наблюдения за миром ошибок ждут вас в моём докладе "Ошибки в коде: ожидания и реальность".
👍1
https://vk.com/video-11805870_456239336
Это Юрий Минаев, архитектор C++-анализатора PVS-Studio, и его доклад на C++ Zero Cost Conf 2024. Юрий рассмотрел семантику языка с точки зрения статического анализатора или фронтенда компилятора.
Это Юрий Минаев, архитектор C++-анализатора PVS-Studio, и его доклад на C++ Zero Cost Conf 2024. Юрий рассмотрел семантику языка с точки зрения статического анализатора или фронтенда компилятора.
VK Видео
Семантика для кремниевых мозгов | Юрий Минаев, PVS-Studio
Это Юрий Минаев, архитектор C++-анализатора PVS-Studio, и его доклад на C++ Zero Cost Conf 2024. Юрий рассмотрел семантику языка с точки зрения статического анализатора или фронтенда компилятора. --------------------- 🎁Попробовать PVS-Studio бесплатно в…
1 апреля 2024 года введён в действие новый ГОСТ Р 71207–2024 "Статический анализ программного обеспечения". Если в ГОСТ Р 56939–2016 говорится о необходимости использования статического анализа при разработке безопасного программного обеспечения (РБПО), то ГОСТ Р 71207–2024 уточняет, что именно это означает.
Информация в ГОСТ очень плотная, и её тяжело сразу воспринять, если вы ранее не имели дело со статическим анализом кода и РБПО. Поэтому я подготовил и провёл цикл из 5 вебинаров, где разобрал различные аспекты ГОСТ и примерами пояснил некоторых термины.
Информация в ГОСТ очень плотная, и её тяжело сразу воспринять, если вы ранее не имели дело со статическим анализом кода и РБПО. Поэтому я подготовил и провёл цикл из 5 вебинаров, где разобрал различные аспекты ГОСТ и примерами пояснил некоторых термины.
Хабр
ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода
1 апреля 2024 года введён в действие новый ГОСТ "Статический анализ программного обеспечения". Если в ГОСТ Р 56939–2016 говорится о необходимости использования статического анализа при...
👍3
Мы учим анализатор PVS-Studio искать не только универсальные ошибки, но и связанные с использованием распространённых библиотек. Например, в рамках поддержки из GameDev индустрии, мы реализуем специализированные диагностики для Unity и Unreal Engine.
Более того, появляются не только диагностики для поиска багов, но и для микрооптимизаций. Мы честно не называем это оптимизацией потому, что у статического анализатора недостаточно информации, как часто выполняются различные участки кода. Для оптимизации следует использовать профайлеры.
Тем не менее, определённый выигрыш можно получить. Пример такой диагностики V4006. Помогает сократить количество математических операций, выполняемых над матрицами, векторами и т.д.
Если заинтересовались попробовать PVS-Studio, то промокод progtales позволяет получить триальную версию сразу на месяц.
Более того, появляются не только диагностики для поиска багов, но и для микрооптимизаций. Мы честно не называем это оптимизацией потому, что у статического анализатора недостаточно информации, как часто выполняются различные участки кода. Для оптимизации следует использовать профайлеры.
Тем не менее, определённый выигрыш можно получить. Пример такой диагностики V4006. Помогает сократить количество математических операций, выполняемых над матрицами, векторами и т.д.
Если заинтересовались попробовать PVS-Studio, то промокод progtales позволяет получить триальную версию сразу на месяц.
👍4
Вы знали про ISO week date? Я – нет. Оказывается, есть форматирование даты, с номером года относительно недели. На практике это нужно очень редко. Поэтому, если кто-то в Java использовал спецификатор YYYY, вместо yyyy, он почти наверняка ошибся. Сделали в PVS-Studio новую диагностику на эту тему.
См. также: SimpleDateFormat YYYY против yyyy.
См. также: SimpleDateFormat YYYY против yyyy.
😱5
Доклад "Разрушители мифов: С++ уже не торт" от Филиппа Хандельянца (тимлид C++ команды PVS-Studio). Язык программирования С++ существует уже больше 40 лет. За это время появилась целая куча мифов и небылиц о нём. Действительно ли С++ непрост для новичков? С++ устарел и больше никому не нужен?
VK Видео
Разрушители мифов: С++ уже не торт
Язык программирования С++ существует уже больше 40 лет. За это время появилась целая куча мифов и небылиц о нём. Мы будем вместе опровергать или подтверждать их. Действительно ли С++ непрост для новичков? С++ устарел и больше никому не нужен? Эти и другие…
👍3
Коллега делает новую диагностику для PVS-Studio, касающуюся некорректного использования dynamic_cast для COM-интерфейсов, где нужен вызов QueryInterface.
Читаю документацию на диагностику и чувствую, что что-то не так. Но я так давно работал с COM, что уже всё забыл и затрудняюсь сформулировать замечания. Потом я вспоминаю про свои "COM-конспект" и о чудо, тетрадка находится. Через 15 минут листания я осознаю, что мне не нравится в описании.
Однако, пост побудила написать другая мысль. А сейчас так изучают программирование? Конспектируют, зарисовывают? Или всё подменил условный ютуб, дающий информацию быстро, но не дающий остановиться, обдумать услышанное, записать. Конечно, это возможно. Однако, я видел, как люди что-то выписывают, читая книги про программирования. И сам так делал. Но я не вижу такое при просмотре докладов, обучающих видео, лекций. Да и вообще кажется я сейчас не вижу, что кто-то конспектирует. Что вы думаете?
Читаю документацию на диагностику и чувствую, что что-то не так. Но я так давно работал с COM, что уже всё забыл и затрудняюсь сформулировать замечания. Потом я вспоминаю про свои "COM-конспект" и о чудо, тетрадка находится. Через 15 минут листания я осознаю, что мне не нравится в описании.
Однако, пост побудила написать другая мысль. А сейчас так изучают программирование? Конспектируют, зарисовывают? Или всё подменил условный ютуб, дающий информацию быстро, но не дающий остановиться, обдумать услышанное, записать. Конечно, это возможно. Однако, я видел, как люди что-то выписывают, читая книги про программирования. И сам так делал. Но я не вижу такое при просмотре докладов, обучающих видео, лекций. Да и вообще кажется я сейчас не вижу, что кто-то конспектирует. Что вы думаете?
👍5