V3225. A data reading method returns the number of bytes that were read and cannot return the value of -1.
Анализатор обнаружил некорректную проверку возвращаемого значения метода. Некоторые методы возвращают значение, указывающее на успешность выполнения. Разработчик может ожидать, что метод вернёт -1, а на самом деле вернёт 0.
Рассмотрим пример:
public void ProcessStream(Stream s)
{
byte[] bytes = new byte[s.Length + 10];
int numBytesRead = 0;
int n = s.Read(bytes, numBytesRead, 1);
if (n == -1)
{
....
}
....
}
В данном случае проверка возвращаемого значения метода бессмысленна, поскольку метод Read, если достигнет конца потока, вернёт 0.
Исправить код можно следующим образом:
public void ProcessStream(Stream s)
{
byte[] bytes = new byte[s.Length + 10];
int numBytesRead = 0;
int n = s.Read(bytes, numBytesRead, 1);
if (n == 0)
{
....
}
....
}
Данная диагностика классифицируется как: