Dela via


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.

Se även