CA2022: Evitar la lectura inexacta con Stream.Read
Propiedad | Value |
---|---|
Identificador de la regla | CA2022 |
Título | Evitar la lectura inexacta con Stream.Read |
Categoría | Confiabilidad |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | Como advertencia |
Causa
Se realiza una llamada a Stream.Read o Stream.ReadAsync y no se comprueba el valor devuelto.
Descripción de la regla
Stream.Read y Stream.ReadAsync pueden devolver menos bytes de los solicitados, lo que da lugar a código no confiable si no se comprueba el valor devuelto.
Cómo corregir infracciones
Para corregir una infracción, compruebe el valor devuelto (que es el número total de bytes leídos en el búfer) o llame Stream.ReadExactly a o, en su lugar, .Stream.ReadExactlyAsync
Ejemplo
El fragmento de código siguiente muestra una infracción de CA2022 y la corrección de la infracción.
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
Cuándo suprimir las advertencias
No debería suprimir advertencias de esta regla, ya que la aplicación podría bloquearse si no corrige las infracciones.