CA2022: избегайте неисключаемого чтения с помощью Stream.Read
Свойство | Значение |
---|---|
Идентификатор правила | CA2022 |
Заголовок | Избегайте неисключаемого чтения с помощью Stream.Read |
Категория | Надежность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предупреждение |
Причина
Вызов или Stream.ReadAsync выполняетсяStream.Read, а возвращаемое значение не проверяется.
Описание правила
Stream.Read и Stream.ReadAsync может возвращать меньше байтов, чем запрошено, в результате чего ненадежный код, если возвращаемое значение не проверяется.
Устранение нарушений
Чтобы устранить нарушение, проверьте возвращаемое значение (общее количество байтов, считываемых в буфер) или вызов Stream.ReadExactly или Stream.ReadExactlyAsync вместо этого.
Пример
В следующем фрагменте кода показано нарушение CA2022 и исправление нарушения.
void M1(Stream stream, byte[] buffer)
{
// CA2022 violation.
stream.Read(buffer, 0, buffer.Length);
// Fix for the violation.
stream.ReadExactly(buffer);
}
Shared Sub M(stream As Stream, buffer As Byte())
' CA2022 violation.
stream.Read(buffer, 0, buffer.Length)
' Fix for the violation.
stream.ReadExactly(buffer)
End Sub
Когда лучше отключить предупреждения
Вы не должны подавлять предупреждения из этого правила, так как приложение может зависать, если вы не исправите нарушения.