PVS-Studio: поиск ошибок в С/С++, С# и Java – Telegram
PVS-Studio: поиск ошибок в С/С++, С# и Java
1.71K subscribers
1.46K photos
65 videos
2 files
1.44K links
Статический анализатор на страже качества, защищённости (SAST) и безопасности кода.

Сайт: https://pvs-studio.ru/ru/
Download Telegram
История одного бага 👾

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

В карточках рассказали об одной из неочевидных программных ошибок. Остальные ждут в нашем блоге: pvs-studio.com/go.php?url=1918
3👍1👎1😐1
В новой версии .NET улучшилась производительность методов Min, Max, Average и Sum для массивов и списков

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

Чтобы улучшить производительность LINQ, разработчики Microsoft и .NET использовали 'Span' и аппаратное ускорение для работы с векторами.

Технические подробности — в нашем блоге.
👍6
🔺 Linkage (связывание) — это свойство идентификатора, позволяющее компилятору в некоторых случаях создавать одну общую сущность для нескольких одинаковых имён, объявленных в разных единицах трансляции. Вместе с областью видимости связывание определяет, из каких единиц трансляции и их блоков можно обратиться к сущности.

Существуют 4 вида связывания:
🔹 no linkage
🔹 internal linkage
🔹 external linkage
🔹 module linkage

Подробнее о каждом из них: pvs-studio.com/go.php?url=1929
👍2😐2
Правильный ответ:
Любой индекс будет считаться корректным. Чтобы исправить ошибку, надо заменить оператор || на &&:

if (idx >= 0 && idx < 4) {

#задача_PVS
🚩 Проверяйте места, где указатель приводится к целочисленным типам

Запись значения указателя в 32-битную целочисленную переменную — коварная ошибка при создании 64-битного приложения. Такие ошибки незаметны: программа "почти работает", а специально повторить возникающие проблемы трудно.

Разбираемся, как обезопасить себя при создании 64-битных приложений ⬇️
👍2
Релиз .NET 7 — хороший повод покопаться в исходниках, чтобы поискать ошибки и странные места.

В этот раз за комментариями по находкам мы обратились к самим разработчикам .NET — кому знать код, как не им? Что из этого вышло, читайте в новой статье ⬇️
👍5
🆕 Вышла новая версия PVS-Studio — 7.22

Что нового:
🔹Плагины для Visual Studio Code и Qt Creator
🔹Поддержка анализа .NET 7, C# 11 и Blazor компонентов
🔹Улучшения и доработки механизма Best Warnings
🔹7 новых диагностик для анализа C, C++ и C# кода

👉🏻 Читать подробнее о релизе

👉🏻 Попробовать новую версию анализатора


#релиз_PVS
🔥4👍1
Правильный ответ:
В цикле производится проверка значения переменной data. Если она равна null и её свойство Length имеет положительное значение, то производится выход из цикла. Очевидно, это невозможно. Более того, обращение к свойству Length переменной, имеющей значение null, приведёт к выбрасыванию исключения. Здесь же обращение производится именно тогда, когда data = null. Учитывая комментарий разработчика, в условии должен использоваться оператор '||'.

#задача_PVS
Новогодние праздники – одни из самых любимых и ожидаемых во всём мире 🎄🎅

Подарки, украшения, внимание к родным и близким – всё это неотъемлемый атрибут новогодней суматохи. Эта суматоха не обошла стороной и нас.

В преддверии новогодних праздников подготовили для вас развлечения и подарки, а вот какие именно — читайте в этой статье 🎁
5
Получить NullReferenceException на этапе разработки – не самый плохой сценарий, ведь проблему можно исправить сразу. Гораздо хуже, когда её находит пользователь при работе с продуктом.

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

В этой статье рассказываем о неочевидных возможностях nullable reference типов.
👍2🤔1
Правильный ответ:
Рассмотрим подробнее выражение (12 * 1 « (2 * order)). Анализатор напоминает, что операция '*' имеет более высокий приоритет, чем операция битового сдвига '«'. Умножение 12 на 1 бессмысленно, а скобки вокруг 2 * order не нужны.

#задача_PVS
Любой бы на месте Бага позеленел и взбесился. Как порядочный интроверт он живёт в глубине кода и скрывается куда подальше от разработчиков, ревьюверов, тестировщиков и вообще всех.

Но эти «все» готовят грандиознейшее празднование Нового года и Рождества. Они шумят, всё украшают и дико бесят. Кто бы отказал себе в удовольствии испортить праздники? Баг решает украсть их.

Не дай Багу всё испортить! Пройди квиз, чтобы спасти новогодние праздники от обиженного крылатого монстра: https://pvs-studio.com/go.php?url=1950
6
За 2022 год мы написали много статей об ошибках, найденных в Open Source проектах.

Подводим итоги и представляем десяток самых интересных C#-срабатываний 🏆
pvs-studio.com/go.php?url=1955

А как бы выглядел ваш топ?
🔥4
С Наступающим! 🎄

В перерыве между нарезанием салатов, просмотром новогодних фильмов и другими предпраздничными хлопотами предлагаем сыграть в игру.

Правила просты: пишите в комментариях, какие пункты у вас совпали в этом году. Победитель получает новогоднее настроение и нормальный снег
🎄9