KCatch ニュース
KCatch.pm 紹介ページを設置しました。
最近は execdata オプションよりも、ファイルの分離をお勧めしています。
KCatch.pm スクリプト自体のバージョンアップは
2002年から停止していますが、
単にバージョンアップの必要がないだけなので、
現在も従来通りバージョン 1.13 をご利用いただけます。 :-)
KCatch ニュース (2004/07/06)
ニュースはないので、Google AdSense を入れてみました。
KCatch ニュース (2002/07/01)
バグフィックスバージョン 1.13 を緊急リリース
この1年半、お陰さまで KCatch.pm は安定稼動していたかと思いきや、
バグが残っていました。修正した
バージョン 1.13を緊急リリースしました。
旧バージョン 1.11 では
エラーメッセージ中の &・<・> 文字が
HTML モードで正しくエスケープ処理されていませんでした。
(バージョン 1.10 までは問題ありません)
CGI 側の出力するエラーメッセージの内容に寄っては、
クロスサイトスクリプティングの脆弱性となる可能性があります。
ただし、CGI 側でエラーが発生したときに、
悪意のある利用者が書き込んだクエリなどの内容を
エラーメッセージに出力している場合のみに発生します。
その他の 1.13 細かい修正点
-
上記のエスケープ処理を行う &html_filter(); フィルタが
バージョン 1.11 では有効に働いていませんでした。
フィルタを有効にすることで、解決しました。
バージョン 1.10 までは同様の処理があるので問題ありません。
-
また、&html_filter(); フィルタ復活に伴い、
メッセージ中の改行コードには自動的に <BR> タグが付加されます。
長いメッセージの場合、少し見やすくなるかもしれません。
-
HTML モードでは、エラーメッセージが赤文字表示となりますが、
CGI 側がタグ中の属性値の間でエラーが発生し、
KCatch.pm がキャッチした場合、
KCatch.pm が出力するタグの関係で IE では赤文字表示となりませんでした。
IE でも赤文字表示となるように改良しました。
<tag arg="ここでエラーが発生した場合">
-
その他、2箇所“Use of uninitialized value”が残っていたので、修正しました。
バージョンアップの手順
最新バージョンをダウンロードして、
従来の KCatch.pm を置き換えてください。
基本的に CGI の変更は不要で、KCatch.pm を変えてもそのまま動きます。
バージョン 1.11 をご利用の方は、できるだけバージョンアップしてください。
CGI 側でエラーメッセージ出力前に正しくクエリ処理が行われている場合や、
バージョン 1.10 以下の場合は、必ずしも置き換える必要はありません。
Apache・OpenSSH・libc といろいろ大変な昨今ですが、お手数かけます。
m(..)m
KCatch ニュース (2000/12/16)
バグフィックスバージョン 1.11 をリリース
先週リリースした
バージョン 1.10には、
execdata オプションを使用した状態で
require した外部ファイル中でのエラーが発生した時に、
正しいエラー位置を取得できないなどのバグがあることが判明しました。
これらのバグを修正した
バージョン1.11をリリースします。
なお、execdata オプションを使用しない場合は 1.10 でも弊害はありませんが、
新しいバージョン1.11か、execdata のない
バージョン1.07
の利用をお勧めします。
execdata オプションの制限
1.10 以降で使用可能な execdata オプションには、以下の制限があります。
- use KCatch 前に my 宣言した変数は、use KCatch 以降のソースからは
参照できません。
use KCatch 後に my 宣言するか、
my 宣言をせずに use vars 宣言して利用してください。
(ソース冒頭で use KCatch してから my 宣言をするのをお勧めします)
- execdata オプションは、main パッケージ下からしか使用できません。
他のパッケージから use KCatch を呼び出したい場合は、
execdata オプションは使えません(エラー表示)。
use KCatch してから、他のパッケージ名に切り替えてください。
execdata オプションを使わない場合は、
他のパッケージ名からでも use KCatch できます。
-
__DATA__ 及び __END__ トークンは1つのソースファイルで
1度しか使えません。
そのため、既にこれらを使用している CGI プログラムでは、
execdata オプションは使えません。
execdata オプションを使わない場合は、__DATA__ を使えます。
ただし、これらの制限は、execdata オプションを使用しない場合は関係ありません。
スクリプトの冒頭で use KCatch qw( execdata );__DATA__ するのをお勧めします。
KCatch ニュース (2000/12/09)
KCatch.pm の新バージョン 1.10 をリリースしました!
従来の KCatch.pm は、use KCatch しているソース自身にあるエラーの捕捉が
イマイチ弱いところがありました(特に Perl 文法エラーの場合)。
今回リリースした新バージョンによる execdata オプションは、その
use KCatch しているソース自身にあるエラーすらも、ほぼ確実に捕捉できます!
また今回のリリースでは、日本語の文字化けを回避する jcode= オプションも
追加しています。
その他については、マニュアルを参照してください。
これまで既に use KCatch していた方へ
この強力なオプションを使うためには、CGIプログラム側の変更が必要です。(1ヶ所のみ)
-
KCatch.pm 最新版をダウンロードする
- CGIと同じディレクトリか、@INC のディレクトリにある KCatch.pm を置き換える
- 従来、CGIスクリプトの冒頭で
use KCatch;
とだけ書いていた行を、
use KCatch qw( execdata );__DATA__
と書き換えてください。(必ず __DATA__ までが必要です)
はじめて use KCatch してみる方へ
KCatch の快適な世界へようこそ!
恐らく、今までの苦労に涙が出てくることうけあい!(笑)
-
KCatch.pm 最新版をダウンロードする
- CGIと同じディレクトリか、@INC のディレクトリに KCatch.pm をアップロードする
- CGIスクリプトの冒頭に、
use KCatch qw( execdata );__DATA__
の1行を追加するだけ。(必ず __DATA__ までが必要です)
- 試しにバグを付けてみたり、warn "Hello, World!!\n"; を追加してみると・・・(!!)
CGI開発時のお勧めオプション
ちょっと長くなってしまいますが、
CGIプログラムの開発時にお勧めのオプションはこんな感じです。
use KCatch qw( jcode=euc source stderr execdata );__DATA__
- jcode=euc ⇒ エラーや、warn、die の文字列の中に日本語が含まれる場合に
文字化けを回避するために、出力する文字コードを指定できます。
別途 require "jcode.pl" しておく必要があります。
- source ⇒ エラーのあったソースコードを表示します。
( CGI の正式稼動時には、このオプションは外しておくことをお勧めします)
- stderr ⇒ エラーの情報を STDERR にも吐き出します。
Apache のエラーログを見るときに便利でしょう。
- execdata ⇒ どうしても Internal Server Error が消えないときの救世主です。
また、CGIプログラムのデバッグ出力は、ありがちな print 文でなく warn 文を使うと、
KCatch 経由でまとめて表示されるので便利です。
(とはいえ warn を大量に呼び出すと遅くなるので、呼び出し回数はある程度に)
その他のオプションについては、マニュアルを
参照してください。
__DATA__ トークンに関する注意点
execdata オプションで使用している __DATA__ トークンは
1ソースファイルで1度しか使えません
そのため、既に __DATA__ トークンを使用している CGI プログラムでは、
この「救世主」execdata オプションも残念ながら使用できません。
その場合は、execdata オプションを付けずに通常の KCatch をご利用ください。
KCatch でも捕捉出来ないエラー
KCatch が補足できるのは、
use KCatch の行が実行された場合の、それ以降の行にあるエラーのみです。
use KCatch の行が実行できない場合や、
何もエラー(die・warn)が発生しない場合も、捕捉出来ません。
KCatch を使ってもなお Internal Server Error などが出る場合は、
以下の原因が考えられますので、参考にしてください。
- CGI スクリプト冒頭 Perl のパス指定が間違ってる
- CGI スクリプトの改行コードが違う(LF?)
- CGI スクリプトのパーミションが違う(755?)
- HTTP ヘッダ出力がない(Premature end of script headers:)
- HTTP ヘッダ出力が違う(malformed header from script.)
- URL が間違ってる、サーバが動いていない、などなど
KCatch.pm の不具合情報や、ご意見・ご要望をお待ちしております。
Copyright 1999-2002 Kawasaki Yusuke <u-suke [at] kawa.net>
and
Kappe Inc.