PVS-Studio想要但在robots.txt中找不到错误

图片1

前几天Google透露了robots.txt解析器的来源。 为什么不使用PVS-Studio进行已经广泛检查的项目运行,并可能发现错误。 就这样说完了。 但我希望我们能找到有意义的东西。 好吧,那就让它成为为Google开发人员打满分的理由。

robots.txt-是一个索引文件,其中包含搜索机器人的规则。 它适用于https,http和FTP协议。 Google向所有人提供了robots.txt文件的解析器。 在此处阅读有关此新闻的更多信息: Google打开robots.txt解析器的源代码

我想大多数读者都知道PVS-Studio的功能。 但是,如果这是您第一次访问我们的博客,我将简要介绍一下。 PVS-Studio是静态代码分析器,它使您能够发现用C,C ++,C#和Java编写的项目中的各种错误,漏洞和缺陷。 换句话说,PVS-Studio是一种SAST解决方案,它既可以在用户计算机上运行,​​也可以在服务器上构建,也可以在云中运行 。 PVS-Studio团队还喜欢撰写有关各种项目检查的文章 。 因此,让我们直截了当地,尝试从Google找到解析器源代码中的错误。

不幸的是,但是没有其他人感到高兴,但是没有其他错误。 我只会介绍几个小缺陷。 好吧,我必须写一些有关该项目的内容:)。 缺少错误是由于项目量少和代码本身的高质量。 这并不意味着没有隐藏的错误,但是静态分析当时是无能为力的。

因此,这篇文章恰好符合我们另一篇文章“ 有关检查nginx的最短文章 ”的精神。

我发现了一个可能的优化案例:

V805性能下降 。 使用'strlen(str)> 0'构造来识别空字符串效率不高。 一种更有效的方法是检查:str [0]!='\ 0'。 机器人cc 354

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

调用strlen函数来查找字符串是否为空是无效的。 这种检查可以简单得多: if(*键[0]!='\ 0')。 这样,即使它不是空的,也不必遍历整个字符串。

已创建“ basic_string”类型的V808 “路径”对象,但未使用。 robots.cc 123

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

字符串已声明,但不再使用。 在某些情况下,未使用的变量可能表示错误。 在这种情况下,看起来好像已经以某种方式使用了此变量,但是在进行更改后,它变得不必要了。 因此,分析器通常可以通过简单地删除其外观的先决条件来帮助使代码更简洁,并有助于避免错误。

在下一种情况下,分析仪建议在执行完整个主体后添加默认返回 。 也许值得在最后添加一个return语句,以了解一切都已经完成。 但是,如果打算采取这种行为,则无需进行任何更改。 如果您不想看到此警告,则可以在PVS-Studio中将其取消显示,然后再也不会看到它了:)。

V591 “ main”功能不返回等于“ return 0”的值。 这可能是意外行为。 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; } } 

我还发现,下面两个具有不同名称的函数是以相同的方式实现的。 也许这是因为这些功能在早期具有不同的逻辑,但却合而为一。 可能是拼写错误蔓延到某个地方,因此应仔细检查此类警告。

V524'MatchDisallow '函数的主体与'MatchAllow'函数的主体完全等效是很奇怪的。 机器人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; } 

这是我唯一可疑的地方。 应该由项目的作者检查。

因此,对Google的robots.txt解析器的检查表明,该项目已经过多次检查并得到了广泛使用,其质量很高。 即使发现的某些缺陷也无法破坏酷炫的Google编码人员编写此项目的印象:)。

我们也建议您在感兴趣的项目上下载并尝试使用PVS-Studio

Source: https://habr.com/ru/post/zh-CN459658/


All Articles