Condividi tramite


CA2022: Evitare operazioni di lettura inesattiva con Stream.Read

Proprietà valore
ID regola CA2022
Title Evitare la lettura inesattiva con Stream.Read
Categoria Affidabilità
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 9 Come avviso

Causa

Viene effettuata una chiamata a Stream.Read o Stream.ReadAsync e il valore restituito non viene controllato.

Descrizione regola

Stream.Read e Stream.ReadAsync potrebbero restituire meno byte rispetto a quelli richiesti, generando codice non affidabile se il valore restituito non è selezionato.

Come correggere le violazioni

Per correggere una violazione, controllare il valore restituito (ovvero il numero totale di byte letti nel buffer) oppure chiamare Stream.ReadExactly o Stream.ReadExactlyAsync .

Esempio

Il frammento di codice seguente mostra una violazione di CA2022 e la correzione per la violazione.

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

Quando eliminare gli avvisi

Non è consigliabile eliminare gli avvisi da questa regola, perché l'app potrebbe bloccarsi se non vengono risolte le violazioni.

Vedi anche