CA2022: Undvik att läsa inexact med Stream.Read
Property | Värde |
---|---|
Regel-ID | CA2022 |
Title | Undvik att läsa inexact med Stream.Read |
Kategori | Tillförlitlighet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Ett anrop till Stream.Read eller Stream.ReadAsync görs och returvärdet är inte markerat.
Regelbeskrivning
Stream.Read och Stream.ReadAsync kan returnera färre byte än begärt, vilket resulterar i otillförlitlig kod om returvärdet inte är markerat.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse kontrollerar du antingen returvärdet (vilket är det totala antalet byte som läse in i bufferten) eller anropar Stream.ReadExactly eller Stream.ReadExactlyAsync i stället.
Exempel
Följande kodfragment visar ett brott mot CA2022 och korrigeringen för överträdelsen.
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
När du ska ignorera varningar
Du bör inte ignorera varningar från den här regeln eftersom din app kan hänga sig om du inte åtgärdar överträdelserna.