PVS-Studio
1.53K subscribers
1.25K photos
44 videos
2 files
1.29K links
Тот самый анализатор с Хабра:
https://pvs-studio.ru/ru/
Download Telegram
В наше время многие интересуются биржами, акциями, облигациями, а некоторые даже имеют свои портфели (речь не про школьников). Существует множество технологий и инструментов для автоматизации торговли. А теперь представьте, к каким убыткам могут привести ошибки в исходном коде такого программного обеспечения.

Поэтому давайте посмотрим на потенциальные ошибки в популярном торговом движке Lean 📈

#cтатья #csharp
3
⚡️В новым релизе 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
Please open Telegram to view this post
VIEW IN TELEGRAM
9