El otro día, Google publicó el código fuente del analizador de robots.txt. ¿Por qué no ejecutar el proyecto ya probado por PVS-Studio y posiblemente encontrar un error? Apenas dicho que hecho. Es una pena que no se pueda encontrar nada significativo. Pues bien, que sea solo una excusa para alabar a los desarrolladores de Google.
robots.txt: un archivo de índice que contiene las reglas para los robots de búsqueda. Es válido para los protocolos https, http y ftp. Google ha hecho que su analizador de archivos robots.txt esté disponible para todos. Lea más sobre esta noticia aquí:
Google abre el código fuente del analizador de robots.txtCreo que la mayoría de los lectores de nuestros artículos saben lo que hace PVS-Studio. Pero en caso de que sea nuevo en nuestro blog, le daremos una breve referencia. PVS-Studio es un analizador de código estático que le permite encontrar varios errores, vulnerabilidades y deficiencias 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 usuarios o servidores de compilación como en la
nube . Y al equipo de PVS-Studio le encanta escribir
artículos sobre la verificación de varios proyectos. Así que vayamos al grano e intentemos encontrar errores en el código fuente del analizador de Google.
Para nuestro pesar, y, para deleite de todos los demás, no se encontraron errores. Solo se encontraron un par de fallas menores, de las que hablaremos. Tienes que escribir al menos algo :). La ausencia de errores se explica por el pequeño volumen del proyecto y la alta calidad del código en sí. Esto no significa que algunos errores no se escondan allí, pero el análisis estático resultó ser impotente en este momento.
En general, este artículo resultó en el espíritu de nuestra otra publicación, "
El artículo más corto sobre la verificación de nginx ".
Había una posibilidad de pequeña 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; }
Llamar a la función
strlen para averiguar si una cadena no está vacía es una forma ineficiente. Tal verificación se puede hacer mucho más simple:
if (* key [0]! = '\ 0') , y no necesitará revisar todos los elementos de 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 de
ruta se declara, pero no se usa más. En algunos casos, las variables no utilizadas pueden indicar un error. Pero aquí parece que antes esta variable se usaba de alguna manera, pero después de hacer los cambios ya no era necesaria. Por lo tanto, el analizador a menudo también ayuda a limpiar el código y a evitar errores simplemente eliminando los requisitos previos para su apariencia.
En el siguiente caso, el analizador, en esencia, hace una recomendación para agregar un
retorno predeterminado después de que
se haya procesado todo el
principal . Puede valer la pena agregar
retorno al final para que pueda entender que todo realmente funcionó. Sin embargo, si este comportamiento fue planeado y no era necesario cambiar nada, y no quisiera ver el mensaje del analizador, en el caso de PVS-Studio puede suprimir esta advertencia 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 se encontró que las dos funciones a continuación, con diferentes nombres, tienen la misma implementación. Quizás este sea el resultado del hecho de que antes estas funciones tenían una lógica diferente, pero llegaron a lo mismo. O puede ser que un error tipográfico se haya infiltrado en algún lugar, 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; }
Este es el único lugar que me hace sospechar. Debe ser revisado por los autores del proyecto.
Por lo tanto, la verificación del analizador de robots.txt de Google mostró que el proyecto, que se usa de manera tan activa y probablemente se probó repetidamente en busca de errores, tiene un código de alta calidad. Y las deficiencias encontradas no pueden estropear en absoluto la impresión de qué codificadores geniales de Google estuvieron involucrados en este proyecto :).
Le ofrecemos
descargar y probar PVS-Studio en el proyecto que le interesa.

Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: Victoria Khanieva.
PVS-Studio quería pero no pudo encontrar errores en robots.txt