O PVS-Studio queria, mas não conseguiu encontrar erros no robots.txt

Quadro 1

Outro dia, o Google revelou as fontes do analisador robots.txt. Por que não fazer uma corrida para o projeto já verificado, usando o PVS-Studio, e possivelmente encontrar um bug. Assim dito, feito. Mas eu gostaria que pudéssemos encontrar algo significativo. Bem, deixe ser apenas uma razão para dar notas máximas aos desenvolvedores do Google.

robots.txt - é um arquivo de índice que contém regras para robôs de pesquisa. Funciona para protocolos https, http e FTP. O Google disponibilizou o analisador do arquivo robots.txt para todos. Leia mais sobre esta notícia aqui: o Google abre o código-fonte do analisador robots.txt

Acho que a maioria dos nossos leitores sabe o que o PVS-Studio faz. Mas caso seja sua primeira vez em nosso blog, darei uma breve referência. O PVS-Studio é um analisador de código estático que permite encontrar uma variedade de bugs, vulnerabilidades e falhas em projetos escritos em C, C ++, C # e Java. Em outras palavras, o PVS-Studio é uma solução SAST e pode funcionar tanto em máquinas de usuários quanto em servidores de compilação e na nuvem . A equipe do PVS-Studio também gosta de escrever artigos sobre verificações de vários projetos. Então, vamos direto ao ponto e tentar encontrar erros no código-fonte do analisador do Google.

Infelizmente, mas para o deleite de todos os outros, nenhum erro foi encontrado. Apenas algumas pequenas falhas, sobre as quais vou contar. Bem, eu tenho que escrever algo sobre o projeto :). A falta de erros se deve à pequena quantidade do projeto e à alta qualidade do próprio código. Isso não significa que não há erros ocultos, mas a análise estática estava indefesa naquele momento.

Portanto, este artigo estava no espírito de outro artigo nosso, " O artigo mais curto sobre uma verificação do nginx ".

Encontrei um caso com possível otimização:

V805 desempenho reduzido. É ineficiente identificar uma string vazia usando a construção 'strlen (str)> 0'. Uma maneira mais eficiente é verificar: str [0]! = '\ 0'. robots.cc 354

bool RobotsTxtParser::GetKeyAndValueFrom(char **key, ....) { .... *key = line; .... if (strlen(*key) > 0) { .... return true; } return false; } 

É ineficiente chamar a função strlen para descobrir se uma string está vazia. Essa verificação pode ser muito mais simples: if (* tecla [0]! = '\ 0'). Dessa forma, você não precisa atravessar a cadeia inteira, se não estiver vazia.

O objeto 'path' do V808 do tipo 'basic_string' foi criado, mas não foi utilizado. robots.cc 123

 std::string GetPathParamsQuery(....) { std::string path; .... } 

A cadeia é declarada, mas não é usada mais. Em alguns casos, variáveis ​​não utilizadas podem indicar um erro. Nesse caso, parece que essa variável foi usada de alguma forma, mas depois de fazer alterações, tornou-se desnecessária. Assim, o analisador geralmente ajuda a tornar o código mais limpo e ajuda a evitar erros, simplesmente removendo os pré-requisitos de sua aparência.

No próximo caso, o analisador recomenda adicionar um retorno padrão após a execução de todo o sistema principal . Talvez valha a pena adicionar uma declaração de retorno no final para entender que tudo realmente deu certo. No entanto, se esse comportamento foi planejado, nada precisa ser alterado. Se você não quiser ver este aviso, no PVS-Studio você pode suprimi-lo e nunca mais vê-lo :).

V591 A função 'main' não retorna um valor que é equivalente a 'return 0'. É possível que esse seja um comportamento não intencional. robots_main.cc 99

 int main(int argc, char** argv) { .... if (filename == "-h" || filename == "-help" || filename == "--help") { ShowHelp(argc, argv); return 0; } if (argc != 4) { .... return 1; } if (....) { .... return 1; } .... if (....) { std::cout << "...." << std::endl; } } 

Também descobri que duas funções abaixo, com nomes diferentes, foram implementadas da mesma maneira. Talvez este seja o resultado do fato de que anteriormente essas funções tinham lógica diferente, mas chegaram a uma. Pode ser que um erro de digitação tenha surgido em algum lugar, portanto esses avisos devem ser cuidadosamente verificados.

V524 É estranho que o corpo da função 'MatchDisallow' seja totalmente equivalente ao corpo da função 'MatchAllow'. robots.cc 645

 int MatchAllow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } int MatchDisallow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } 

É o único lugar de que desconfio. Deve ser verificado pelos autores do projeto.

Assim, a verificação do analisador robots.txt do Google mostrou que esse projeto, que foi verificado várias vezes e é amplamente utilizado, é de ótima qualidade. Mesmo algumas falhas encontradas não podem estragar a impressão de codificadores legais do Google que escrevem este projeto :).

Sugerimos que você faça o download e experimente o PVS-Studio no projeto em que está interessado.

Source: https://habr.com/ru/post/pt459658/


All Articles