スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|10|
2011|01|02|03|07|10|11|
2012|02|03|04|07|08|09|
2013|01|06|07|
2014|02|08|09|11|
2015|09|
2016|01|05|
2017|07|
2018|05|07|
2019|07|
2020|08|09|10|12|
2021|05|
2022|03|

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 以前には似たような症状が他にもあるらしい。