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

Quadro 1

No outro dia, o Google publicou o código fonte do analisador robots.txt. Por que não executar o projeto já testado pelo PVS-Studio e possivelmente encontrar um erro? Mal disse o que fez. É uma pena que nada de significativo possa ser encontrado. Bem, então, deixe apenas uma desculpa para elogiar os desenvolvedores do Google.

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

Eu acho que a maioria dos leitores de nossos artigos sabe o que o PVS-Studio faz. Mas se você é novo no nosso blog, forneceremos uma breve referência. O PVS-Studio é um analisador de código estático que permite encontrar uma variedade de erros, vulnerabilidades e deficiências 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 . E a equipe do PVS-Studio adora escrever artigos sobre a verificação de vários projetos. Então, vamos ao que interessa e tentar encontrar erros no código-fonte do analisador do Google.

Para nosso arrependimento e para o deleite de todos os outros, nenhum erro foi encontrado. Apenas algumas pequenas falhas foram encontradas, sobre as quais falaremos. Você tem que escrever pelo menos alguma coisa :). A ausência de erros é explicada pelo pequeno volume do projeto e pela alta qualidade do próprio código. Isso não significa que alguns erros não ocultam lá, mas a análise estática acabou sendo impotente no momento.

Em geral, este artigo resultou no espírito de nossa outra publicação, " O artigo mais curto sobre verificação do nginx ".

Havia a possibilidade de pequena 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; } 

Chamar a função strlen para descobrir se uma string não está vazia é uma maneira ineficiente. Essa verificação pode ser muito mais simples: if (* key [0]! = '\ 0') e você não precisará passar por todos os elementos da string se ela 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 de caminho é declarada, mas não é usada mais. Em alguns casos, variáveis ​​não utilizadas podem indicar um erro. Mas aqui parece que anteriormente essa variável foi usada de alguma forma, mas depois de fazer as alterações, ela não era mais necessária. Portanto, o analisador geralmente também ajuda a tornar o código mais limpo e a evitar erros, simplesmente removendo os pré-requisitos para sua aparência.

No caso a seguir, o analisador, em essência, faz uma recomendação para adicionar um retorno padrão depois que todo o principal tiver sido processado. Pode valer a pena adicionar retorno no final, para que você possa entender que tudo realmente funcionou. No entanto, se esse comportamento foi planejado e nada precisou ser alterado, e eu não gostaria de ver a mensagem do analisador, no caso do PVS-Studio, você pode suprimir esse aviso 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 foi constatado que as duas funções abaixo, com nomes diferentes, têm a mesma implementação. Talvez este seja o resultado do fato de que antes essas funções tinham lógica diferente, mas chegaram à mesma. Ou 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; } 

Este é o único lugar que me deixa desconfiada. Deve ser verificado pelos autores do projeto.

Assim, a verificação do analisador robots.txt do Google mostrou que um projeto usado de forma tão ativa e, provavelmente, verificado repetidamente por erros, possui código de alta qualidade. E as deficiências encontradas não podem estragar a impressão de que codificadores legais do Google estavam envolvidos neste projeto :).

Oferecemos o download e teste o PVS-Studio no projeto em que você está interessado.



Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Victoria Khanieva. O PVS-Studio queria, mas não conseguiu encontrar erros no robots.txt

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


All Articles