Compartilhar via


CA2022: Evitar leitura inexata com Stream.Read

Propriedade Valor
ID da regra CA2022
Título Evite leitura inexata com Stream.Read
Categoria Confiabilidade
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 9 Como aviso

Causa

Uma chamada para Stream.Read or Stream.ReadAsync é feita e o valor retornado não é verificado.

Descrição da regra

Stream.Read e Stream.ReadAsync pode retornar menos bytes do que o solicitado, resultando em código não confiável se o valor retornado não for verificado.

Como corrigir violações

Para corrigir uma violação, verifique o valor retornado (que é o número total de bytes lidos no buffer) ou chame Stream.ReadExactly ou Stream.ReadExactlyAsync .

Exemplo

O snippet de código a seguir mostra uma violação do CA2022 e a correção da violação.

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

Quando suprimir avisos

Você não deve suprimir avisos dessa regra, pois seu aplicativo pode travar se você não corrigir as violações.

Confira também