CA2022: Undvik oinexakt läsning med Stream.Read

Egenskap Värde
Regel-ID CA2022
Title Undvik att läsa felaktigt med Stream.Read
Kategori Tillförlitlighet
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Som varning
Tillämpliga språk C# och Visual Basic

Orsak

Ett anrop till Stream.Read eller Stream.ReadAsync görs och returvärdet kontrolleras inte.

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.

Se även