前几天,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(* key [0]!='\ 0') ,并且如果字符串是非空的,则不需要遍历字符串的所有元素。
已创建“ basic_string”类型的
V808 “路径”对象,但未使用。 robots.cc 123
std::string GetPathParamsQuery(....) { std::string path; .... }
声明了
路径字符串,但不再使用。 在某些情况下,未使用的变量可能表示错误。 但是,这里似乎早先使用了该变量,但是在进行更改后不再需要它。 因此,分析器通常还可以通过简单地删除其出现的先决条件来帮助使代码更简洁,并有助于避免错误。
在以下情况下,分析器实质上会建议在处理完所有
主输入后添加默认
返回 。 在最后可能值得增加
回报 ,这样您就可以了解所有内容确实有效。 但是,如果此行为是有计划的,不需要进行任何更改,并且我不想看到分析器消息,那么在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 。

如果您想与讲英语的读者分享本文,请使用翻译链接:Victoria Khanieva。
PVS-Studio想要但在robots.txt中找不到错误