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.