Stream.Read и Stream.ReadAsync может возвращать меньше байтов, чем запрошено, в результате чего ненадежный код, если возвращаемое значение не проверяется.
Устранение нарушений
Чтобы устранить нарушение, проверьте возвращаемое значение (общее количество байтов, считываемых в буфер) или вызов Stream.ReadExactly или Stream.ReadExactlyAsync вместо этого.
Пример
В следующем фрагменте кода показано нарушение CA2022 и исправление нарушения.
C#
voidM1(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
Когда лучше отключить предупреждения
Вы не должны подавлять предупреждения из этого правила, так как приложение может зависать, если вы не исправите нарушения.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.