CA2022: Evite leituras inexatas com Stream.Read
Property | valor |
---|---|
ID da regra | CA2022 |
Título | Evite a leitura inexata com Stream.Read |
Categoria | Fiabilidade |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Como aviso |
Motivo
Uma chamada para Stream.Read ou Stream.ReadAsync é feita e o valor de retorno 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 de retorno não for verificado.
Como corrigir violações
Para corrigir uma violação, verifique o valor de retorno (que é o número total de bytes lidos no buffer) ou chame Stream.ReadExactly ou Stream.ReadExactlyAsync em vez disso.
Exemplo
O trecho de código a seguir mostra uma violação de CA2022 e a correção para a 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.