2013-03-05 97 views
0

我使用Perl对规范化的URL(第5.12节),我注意到Perl程序(标识符在(eval 1)第1行太长)的消息开始崩溃。“通过实验,我发现,当URL的方案部分超过248个符号URI构造函数抛出错误:URI-> new(“longerThan248Chars:// bla”)抛出“标识符在(eval 1)第1行太长”

$ perl -e 'use URI; my $uri = URI->new("a" x 248 . "://bla");' 
Identifier too long at (eval 1) line 1. 

这究竟是为什么? 如何防止这种情况?

+0

猜测,可能是一个内置的功能,以防止XSS漏洞? – 2013-03-05 18:53:41

回答

4

URI正在寻找一个做名为

URI::aaaaaaaaaa 

模块什么归结为

eval "require URI::aaaaaaaaaa;" 

的Perl认为你疯了。

>perl -e"eval 'require '.('a' x 500); die [email protected];" 
Identifier too long at (eval 1) line 1. 

最好的解决办法是submit a patch给作者,

return if length($scheme) > 200; 

添加到implementor


在此同时,您可以使用

my $uri = eval { URI->new(...) }; 

要么捕获错误,也可以预先检查该条件:

$uri_string =~ /^${URI::scheme_re}:/ 
相关问题