PVS-Studio quería pero no pudo encontrar errores en robots.txt

Imagen 1

El otro día, Google reveló las fuentes del analizador de robots.txt. ¿Por qué no dar una vuelta por el proyecto ya comprobado utilizando PVS-Studio y posiblemente encontrar un error? Dicho esto, hecho. Pero desearía que pudiéramos encontrar algo significativo. Bueno, entonces que sea solo una razón para dar una buena nota a los desarrolladores de Google.

robots.txt: es un archivo de índice que contiene reglas para robots de búsqueda. Funciona para protocolos https, http y FTP. Google puso el analizador del archivo robots.txt a disposición de todos. Lea más sobre esta noticia aquí: Google abre el código fuente del analizador de robots.txt

Creo que la mayoría de nuestros lectores saben lo que hace PVS-Studio. Pero en caso de que sea tu primera vez en nuestro blog, te daré una breve referencia. PVS-Studio es un analizador de código estático que le permite encontrar una variedad de errores, vulnerabilidades y fallas en proyectos escritos en C, C ++, C # y Java. En otras palabras, PVS-Studio es una solución SAST y puede funcionar tanto en máquinas de usuario, construir servidores como en la nube . Al equipo de PVS-Studio también le gusta escribir artículos sobre cheques de varios proyectos. Así que vayamos al grano e intentemos encontrar errores en el código fuente del analizador de Google.

Desafortunadamente, pero para deleite de todos los demás, no se encontraron errores. Solo un par de fallas menores, de las que hablaré. Bueno, tengo que escribir algo sobre el proyecto :). La falta de errores se debe a la pequeña cantidad del proyecto y la alta calidad del código en sí. Esto no significa que no haya errores ocultos, pero el análisis estático era inútil en ese momento.

Así que este artículo resultó estar en el espíritu de otro nuestro post " El artículo más corto sobre un cheque de nginx ".

Encontré un caso con posible optimización:

V805 Disminución del rendimiento. Es ineficiente identificar una cadena vacía usando la construcción 'strlen (str)> 0'. Una forma más eficiente es verificar: str [0]! = '\ 0'. robots.cc 354

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

Es ineficiente llamar a la función strlen para averiguar si una cadena está vacía. Esta verificación puede ser mucho más simple: if (* key [0]! = '\ 0'). De esta manera, no tiene que atravesar toda la cadena, si no está vacía.

Se creó el objeto V808 'ruta' del tipo 'basic_string' pero no se utilizó. robots.cc 123

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

La cadena se declara, pero no se usa más. En algunos casos, las variables no utilizadas pueden indicar un error. En este caso, parece que esta variable se usó de alguna manera, pero después de hacer cambios se volvió innecesaria. Por lo tanto, el analizador a menudo ayuda a limpiar el código y ayuda a evitar errores simplemente eliminando los requisitos previos para su apariencia.

En el siguiente caso, el analizador recomienda agregar un retorno predeterminado después de que se ejecute todo el main . Quizás valga la pena agregar una declaración de devolución al final para comprender que todo realmente ha funcionado. Sin embargo, si se pretendía tal comportamiento, no es necesario cambiar nada. Si no desea ver esta advertencia, en PVS-Studio puede suprimirla y nunca volver a verla :).

V591 La función 'main' no devuelve un valor, que es equivalente a 'return 0'. Es posible que este sea un comportamiento no deseado. 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; } } 

También encontré que dos funciones a continuación que tenían diferentes nombres se implementaron de la misma manera. Quizás este sea el resultado del hecho de que anteriormente estas funciones tenían una lógica diferente, pero llegaron a una. Puede ser que un error tipográfico se haya deslizado a alguna parte, por lo que dichas advertencias deben revisarse cuidadosamente.

V524 Es extraño que el cuerpo de la función 'MatchDisallow' sea completamente equivalente al cuerpo de la función '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; } 

Es el único lugar del que sospecho. Debe ser revisado por los autores del proyecto.

Por lo tanto, la verificación del analizador de robots.txt de Google mostró que este proyecto, que se ha verificado varias veces y se usa ampliamente, es de gran calidad. Incluso algunos defectos encontrados no pueden estropear la impresión de los codificadores geniales de Google que escriben este proyecto :).

También le sugerimos que descargue y pruebe PVS-Studio en el proyecto que le interesa.

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


All Articles