C#プログラマー、自分でテストしてください-エラーを見つけてください

PVS-Studioアナライザーは、新しい診断ルールで定期的に更新されます。興味深いことに、診断では、すべての作業が終了する前に、疑わしいコードフラグメントが検出されることがよくあります。たとえば、オープンソースプロジェクトでのテスト中。これらの興味深い「発見」の1つを、今日あなたと共有したいと思います。





上記のように、診断ルールをテストする段階の1つは、実際のコードベースでその動作をチェックすることです。このために、選択されたオープンソースプロジェクトのセットが使用され、分析が実行されます。このアプローチの明らかな利点は、診断ルールが「実際の状態」でどのように動作するかを確認できることです。あまり明白ではありません-時々、それについてメモを書くことは罪ではないほど興味深いものがあります。





そこで、Bouncy Castle C#プロジェクトのコードを調べて、エラーを見つけることを提案します。





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();
}

      
      



詮索好きな人のために、陰謀を続けるために写真を追加しました。





IDEまたはStringBuilderクラスのドキュメントを開かないと、多くの人がエラーを見つけることができなかったと思いますコンストラクターを呼び出すときにエラーが発生しました:





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.








All Articles