Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA2022 |
| Tytuł | Unikaj niedokładnego odczytu za pomocą funkcji Stream.Read |
| Kategoria | Niezawodność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako ostrzeżenie |
| Zastosowane języki | C# i Visual Basic |
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 oraz sposób naprawy tego 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ń.