J'ai la fonction suivante pour obtenir un entier à partir d'un octet haut et un bas-octet:Pourquoi l'avertissement FxCop concernant un débordement (CA2233) est-il dans ce code C#?
public static int FromBytes(byte high, byte low)
{
return high * (byte.MaxValue + 1) + low;
}
Lorsque j'analyse l'assemblage avec FxCop, je reçois l'avertissement critique suivant:
CA2233: OperationsShouldNotOverflow
Opérations arithmétiques ne doivent pas être effectuées sans d'abord valider les opérandes pour empêcher le débordement.
Je ne vois pas comment cela pourrait déborder, donc je suppose que FxCop est trop zélé.
Ai-je raté quelque chose? Et quelles mesures pourraient être prises pour corriger ce que j'ai (ou du moins faire disparaître l'avertissement FxCop!)?
Ma mise est sur la partie "byte.MaxValue + 1". – Pwninstein
Votre pari est faux. Son code ne peut pas causer de débordement puisque byte.MaxValue serait TOUJOURS implicitement converti en un int avant que l'étape d'addition ait eu lieu. - Chaque fois qu'une méthode effectue une opération arithmétique et ne valide pas les opérandes au préalable (pour éviter un débordement), vous obtiendrez CA2233. Il existe de nombreux exemples sur la façon de résoudre ce problème sur MSDN à http://msdn.microsoft.com/en-us/library/ms182354.aspx – BrainSlugs83
Lire http://msdn.microsoft.com/en-us/library/ ms182354.aspx – Lijo