Поделиться через


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

Когда лучше отключить предупреждения

Вы не должны подавлять предупреждения из этого правила, так как приложение может зависать, если вы не исправите нарушения.

См. также