CA2022: Vermijd inexact-lezen met Stream.Read
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2022 |
Titel | Vermijd inexact-lezen met Stream.Read |
Categorie | Betrouwbaarheid |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Een aanroep naar Stream.Read of Stream.ReadAsync wordt uitgevoerd en de retourwaarde wordt niet gecontroleerd.
Beschrijving van regel
Stream.Read en Stream.ReadAsync kan minder bytes retourneren dan aangevraagd, wat resulteert in onbetrouwbare code als de retourwaarde niet wordt gecontroleerd.
Schendingen oplossen
Als u een schending wilt oplossen, controleert u de retourwaarde (het totale aantal bytes dat in de buffer is gelezen) of roept Stream.ReadExactly u aan of Stream.ReadExactlyAsync in plaats daarvan.
Opmerking
In het volgende codefragment ziet u een schending van CA2022 en de oplossing voor de schending.
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
Wanneer waarschuwingen onderdrukken
U moet waarschuwingen van deze regel niet onderdrukken, omdat uw app vastloopt als u de schendingen niet oplost.