2013-03-05 30 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}:/ 
相關問題