Udostępnij za pośrednictwem


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ń.

Zobacz też