CA2022: Unikaj nieistniejącego odczytu za pomocą funkcji Stream.Read
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2022 |
Tytuł | Unikaj odczytywania w sposób niewykonany za pomocą funkcji Stream.Read |
Kategoria | Niezawodność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Wywołanie metody Stream.Read lub Stream.ReadAsync jest wykonywane, a wartość zwracana nie jest zaznaczona.
Opis reguły
Stream.Read i Stream.ReadAsync może zwracać mniej bajtów niż żądane, co powoduje zawodny kod, jeśli wartość zwracana nie jest sprawdzana.
Jak naprawić naruszenia
Aby naprawić naruszenie, sprawdź wartość zwracaną (czyli całkowitą liczbę bajtów odczytanych w buforze) lub wywołaj Stream.ReadExactly albo Stream.ReadExactlyAsync zamiast tego.
Przykład
Poniższy fragment kodu przedstawia naruszenie ca2022 i poprawkę naruszenia.
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
Kiedy pomijać ostrzeżenia
Nie należy pomijać ostrzeżeń z tej reguły, ponieważ aplikacja może się zawieszać, jeśli nie naprawisz naruszeń.