Programador C #, teste-se - encontre o erro

O analisador PVS-Studio é atualizado regularmente com novas regras de diagnóstico. Curiosamente, os diagnósticos geralmente detectam fragmentos de código suspeitos antes do final de todo o trabalho. Por exemplo, durante o teste em projetos de código aberto. Um desses 'achados' interessantes que eu gostaria de compartilhar com vocês hoje.





Conforme mencionado acima, uma das etapas de teste de uma regra de diagnóstico é verificar seu funcionamento em uma base de código real. Para isso, é utilizado um conjunto de projetos de código aberto selecionados, para os quais é realizada a análise. A vantagem óbvia dessa abordagem é a capacidade de ver como a regra de diagnóstico se comporta em "condições reais". Menos óbvio - às vezes há algo tão interessante que não é pecado escrever uma nota sobre isso.





Portanto, proponho examinar o código do projeto Bouncy Castle C # e encontrar um erro nele:





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

      
      



Para quem gosta de bisbilhotar, adicionei uma imagem para manter a intriga.





Tenho certeza de que muitos não conseguiram encontrar o erro sem abrir o IDE ou a documentação da classe StringBuilder . O erro foi cometido ao chamar o construtor:





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