日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)
- p (01/03)
- Thiramil (10/26)
- 久々にいまむらを食べたい通りすがり (09/28)
- Fluxadir (05/16)
- Antiprestin (11/08)
2007/07/02
_ [Perl] PATH_INFO に [ 等のメタ文字が含まれていると CGI::path_info がこける
PATH_INFO でパラメータを渡している CGI スクリプトに Shift_JIS で「納」(2バイト目が [ ) とかを渡すとこけるのでなんですかねと調べていったら、どうも CGI.pm のバグらしいことがわかった。
テストコード
#!/usr/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); print CGI::header(); print CGI::path_info();
を設置し、〜/test.cgi/%5B にアクセスしただけで (%5B = [ )
Unmatched [ in regex; marked by <-- HERE in m//[ <-- HERE $/ at (eval 7) line 7.
という感じ。
%28 (、%29 )、%5D ] なんかも同じく。
各バージョンで比較していったところ、CGI.pm 3.17 まで NG で、3.19 では解決していた。
しかし Perl 5.8.8 付属の CGI.pm は 3.15。今最もメジャーなのは 3.15。使えない…。
CGI.pm なんて枯れたモジュールかと思っていたらこんなところではまるとは。
仕方ないので CGI::path_info() を $ENV{PATH_INFO} で置き換えましたよ。
Perl v5.8.8 の CGI.pm の PATH_INFO 処理の問題にぶつかる@nDiki
3.17 以前には似たような症状が他にもあるらしい。