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.txtEu 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