CA2022: Vermeiden von ungenauen Lesevorgängen mit Stream.Read
Eigenschaft | Wert |
---|---|
Regel-ID | CA2022 |
Titel | Vermeiden von ungenauen Lesevorgängen mit Stream.Read |
Kategorie | Zuverlässigkeit |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Warnung |
Ursache
Ein Aufruf Stream.Read an oder Stream.ReadAsync wird ausgeführt, und der Rückgabewert wird nicht überprüft.
Regelbeschreibung
Stream.Read und Stream.ReadAsync gibt möglicherweise weniger Bytes als angefordert zurück, was zu unzuverlässigen Code führt, wenn der Rückgabewert nicht aktiviert ist.
Behandeln von Verstößen
Um einen Verstoß zu beheben, überprüfen Sie entweder den Rückgabewert (die Gesamtanzahl der in den Puffer gelesenen Bytes), oder rufen Sie stattdessen auf Stream.ReadExactly Stream.ReadExactlyAsync .
Beispiel
Der folgende Codeausschnitt zeigt einen Verstoß gegen CA2022 und den Fix für die Verletzung.
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
Wann sollten Warnungen unterdrückt werden?
Sie sollten Warnungen aus dieser Regel nicht unterdrücken, da Ihre App möglicherweise hängen bleibt, wenn Sie die Verstöße nicht beheben.