⚡️В новым релизе PVS-Studio — 7.38, команда C# подготовила несколько новых и интересных диагностик. Сегодня разберем одну из таких – V3225.

Но перед тем, как мы расскажем про нее - предлагаем вам попробовать угадать её суть по ошибке в коде: `public void ProcessStream(Stream strm){ ....

byte[] bytes = new byte[strm.Length + 10]

int numBytesRead = 0;

try { int numRead = strm.Read (bytes, numBytesRead, 1);

if (numRead == -1) { throw new InvalidHeaderException ("Failed to read long name entry"); .... }

} catch (InvalidHeaderException ex) {....} } `Уже нашли ошибку? Она не самая очевидная! Дело в том, что некоторые методы возвращают значение, обозначающее успешность его выполнения (например, -1, 1 или 0).

В данном примере, разработчик ожидал, что метод Read может вернуть -1 и обрабатывает этот случай в блоке catch, но эта ситуация невозможна.

Проблема в том, что метод Read не сможет вернуть -1 (минимальное возможное значение для него 0). В итоге, ситуация, которую хотел избежать разработчик - не вызовет исключение, что может нарушить работу программы.

Анализатор же без проблем находит такую проблему и подсвечивает её прямо в коде: Предупреждение PVS-Studio: V3225. The 'Read' method returns the number of bytes that were read and cannot return the value of -1.

Если вам понравилась эта диагностика – обязательно ознакомьтесь с остальными в новом пресс-релизе для версии PVS-Studio 7.38.

#csharp #PVS_Studio``

⚡️В новым релизе PVS-Studio — 7.38, команда C# подготовила несколько новых и интересных диагностик. Сегодня разберем одну из таких – V3225 | Сетка — социальная сеть от hh.ru