Прочитать на английском

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


CA2022: избегайте неисключаемого чтения с помощью Stream.Read

Свойство Значение
Идентификатор правила CA2022
Заголовок Избегайте неисключаемого чтения с помощью Stream.Read
Категория Надежность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 9 Как предупреждение

Причина

Вызов или Stream.Read выполняетсяStream.ReadAsync, а возвращаемое значение не проверяется.

Описание правила

Stream.Read и Stream.ReadAsync может возвращать меньше байтов, чем запрошено, в результате чего ненадежный код, если возвращаемое значение не проверяется.

Устранение нарушений

Чтобы устранить нарушение, проверьте возвращаемое значение (общее количество байтов, считываемых в буфер) или вызов Stream.ReadExactly или Stream.ReadExactlyAsync вместо этого.

Пример

В следующем фрагменте кода показано нарушение CA2022 и исправление нарушения.

C#
void M1(Stream stream, byte[] buffer)
{
    // CA2022 violation.
    stream.Read(buffer, 0, buffer.Length);

    // Fix for the violation.
    stream.ReadExactly(buffer);
}

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

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

См. также