CA2022: Stream.Read で読み取りを不正確にしないでください
プロパティ | 値 |
---|---|
ルール ID | CA2022 |
Title | Stream.Read を使用して読み取りを不正確にしないようにする |
カテゴリ | 信頼性 |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 警告として |
原因
Stream.ReadまたはStream.ReadAsyncの呼び出しが行われ、戻り値がチェックされません。
規則の説明
Stream.Read と Stream.ReadAsync は、要求されたバイト数よりも少ないバイト数を返す可能性があり、戻り値がチェックされていない場合、コードの信頼性が低下する可能性があります。
違反の修正方法
違反を修正するには、戻り値 (バッファーに読み込まれる合計バイト数) を確認するか、代わりに Stream.ReadExactly または Stream.ReadExactlyAsync を呼び出します。
例
次のコード スニペットは、CA2022 の違反と違反の修正を示しています。
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
どのようなときに警告を抑制するか
違反を修正しないとアプリがハングする可能性があるため、この規則の警告を抑制しないでください。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET