Movable Type 3.35 + Custom Entry Fields 1.22 が XREAサーバーでScript Error

XREAサーバーで動かしたMT上で、Edit Custom Entry Fields をクリックすると下記のScriptエラーが表示される。

Script Error

The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.

XREAでは、cgiをcgidに変更するのがお約束のデバッグ方法のようだ。
それに従い、デバッグ情報を出してみる。

Initializing Logging
Redirecting STDERR to STDOUT

Setting SIGXCPU to default behaviour

Limiting (cpu time) to (300)

Limiting (total available memory) to (160000000)

Limiting (resident set size) to (160000000)

Limiting (number of processes) to (12)


Environment Variables:
     QUERY_STRING: ';from=blog_home;blog_id=1'
      SCRIPT_NAME: '/mt/plugins/CustomFields/entries.cgid'
        PATH_INFO: '/-/mt/plugins/CustomFields/entries.cgid'
    DOCUMENT_ROOT: '/virtual/xxxxx/public_html'
  PATH_TRANSLATED: '<NULL>'
      REMOTE_USER: '<NULL>'
      REMOTE_HOST: '<NULL>'
      REMOTE_ADDR: 'xxx.xxx.xxx.xxx'

User Data Retrieved:
     UserID: 'xxxxx'
        UID: '10870'
        GID: '20000'
   Home Dir: '/virtual/xxxxx'

Script Base Directory:  '/virtual/xxxxx/public_html'
Trying to extract script from PATH_INFO
	Script Relative Path:  'mt/plugins/CustomFields/entries.cgid'
	Script Absolute Path:  '/virtual/xxxxx/public_html/mt/plugins/CustomFields/entries.cgid'

Fixing Environment Variables.

Environment Variables:
     QUERY_STRING: ';from=blog_home;blog_id=1'
      SCRIPT_NAME: '/mt/plugins/CustomFields/entries.cgid'
        PATH_INFO: '<NULL>'
    DOCUMENT_ROOT: '/virtual/xxxxx/public_html'
  PATH_TRANSLATED: '<NULL>'
      REMOTE_USER: '<NULL>'
      REMOTE_HOST: '<NULL>'
      REMOTE_ADDR: 'xxx.xxx.xxx.xxx'


UIDs/GIDs Changed To:
   RUID: '10870'
   EUID: '10870'
   RGID: '20000'
   EGID: '20000'

Changing current directory to '/virtual/xxxxx/public_html/mt/plugins/CustomFields'



argv[0] =  'cgiwrapd'
Executing  '/virtual/xxxxx/public_html/mt/plugins/CustomFields/entries.cgid'
Output of script follows:
=====================================================
Use of uninitialized value in hash element at /virtual/xxxxx/public_html/mt/extlib/CGI.pm line 560.
Status: 200 
Pragma: no-cache
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

(以下、htmlが表示)

ということで、どうやら mt/extlib/CGI.pm で未定義変数参照が発生しているようだ。当該コードは、下記の通りで、6行目を追加で無事解消。

sub parse_params {
    my($self,$tosplit) = @_;
    my(@pairs) = split(/[&;]/,$tosplit);
    my($param,$value);
    foreach (@pairs) {
	next if $_ eq '';  # (←この一行を追加)
	($param,$value) = split('=',$_,2);
	next if $NO_UNDEF_PARAMS and not defined $value;
	$value = '' unless defined $value;
	$param = unescape($param);
	$value = unescape($value);
	$self->add_parameter($param);
	push (@{$self->{$param}},$value);
    }
}

こいつは、Edit Custom Entry Filed のリンクで、mt/plugins/CustomFields/entries.cgi へのパラメーターが、";from=blog_home;blog_id=1" みたいに、";" から始まっているのが原因。

CGI.pm で空パラメーターへの対応が不十分のため、html出力前に警告が表示されてしまうのでした。