L'analyseur PVS-Studio est régulièrement mis à jour avec de nouvelles règles de diagnostic. Fait intéressant, les diagnostics détectent souvent des fragments de code suspects avant la fin de tous les travaux. Par exemple, lors de tests sur des projets open source. Une de ces «découvertes» intéressantes que je voudrais partager avec vous aujourd'hui.
Comme mentionné ci-dessus, l'une des étapes du test d'une règle de diagnostic consiste à vérifier son fonctionnement sur une base de code réel. Pour cela, un ensemble de projets open source sélectionnés est utilisé, pour lequel l'analyse est effectuée. L'avantage évident de cette approche est la capacité de voir comment la règle de diagnostic se comporte dans des «conditions réelles». Moins évident - parfois il y a quelque chose de tellement intéressant que ce n'est pas un péché d'écrire une note à ce sujet.
Donc, je propose de regarder le code du projet Bouncy Castle C # et d'y trouver une erreur:
public static string ToString(object[] a)
{
StringBuilder sb = new StringBuilder('[');
if (a.Length > 0)
{
sb.Append(a[0]);
for (int index = 1; index < a.Length; ++index)
{
sb.Append(", ").Append(a[index]);
}
}
sb.Append(']');
return sb.ToString();
}
Pour ceux qui aiment faire levier, j'ai ajouté une photo pour garder l'intrigue.
Je suis sûr que beaucoup n'ont pas pu trouver l'erreur sans ouvrir l'EDI ou la documentation de la classe StringBuilder . L'erreur a été commise lors de l'appel du constructeur:
StringBuilder sb = new StringBuilder('[');
, PVS-Studio: V3165 Character literal '[' is passed as an argument of the 'Int32' type whereas similar overload with the string parameter exists. Perhaps, a string literal should be used instead. Arrays.cs 193.
StringBuilder, '['. - 91 , .
- , , :
....
public StringBuilder(int capacity);
public StringBuilder(string? value);
....
'[' int (91 Unicode). int, . , .
(.. "[", '['), .
, . , , char, , , .
, , PVS-Studio 7.11. V3165, C, C++, C# Java.
, . - Krypt Habr. - !
P.S. . , - , .
, : Valery Komarov. C# Programmer, It's Time to Test Yourself and Find Error.