5

Perl CGI スクリプトを汚染モードで実行すると、次のようなエラーが発生します...

Insecure dependency in some_function while running with -T switch at (eval some_line) line some_other_line.
Compilation failed in require at my-script.cgi line 39.
BEGIN failed--compilation aborted at my-script.cgi line 39.

my-script.cgi の 39 行目は、それ自体は eval または some_function を使用しないが、おそらく使用する別のライブラリを使用する perl モジュールの use ステートメントです。some_line および some_other_line の行番号は、my-script.cgi または my-script.cgi の 39 行目で「使用」されているライブラリで意味をなさないようです。

このエラーが発生した場合、汚染エラーが発生している場所を追跡するにはどうすればよいですか?

スタック トレースを出力する新しいダイ シグナル ハンドラを設定しようとしました。

$SIG{ __DIE__ } = sub { require Carp; Carp::confess(@_); };

しかし、これはエラーには影響しないようです。おそらく、これはトラッピングであるという誤ったシグナルであるか、十分に早期に発生していないか、より複雑な何かが必要です。

4

2 に答える 2

4

Carp ::汚染チェックによって発生した例外を除いて、常に正常に動作します。出力例:

$ perl -MCarp::Always -T blah.pl
Insecure dependency in sprintf while running with -T switch at blah.pl line 6
        main::foo() called at blah.pl line 8
        main::bar() called at blah.pl line 10
于 2011-06-15T09:24:08.383 に答える
2

私は最近、 Devel::SimpleTraceをデバッグによく使用しています。最近では、Archive::Zip を使用しているときに汚染バグを見つけるのに役立ちました。

ただし、基本的に使用したのと同じsigハンドラーを設定しているため、あなたのケースで機能するかどうかはわかりません。

于 2011-06-15T08:48:23.677 に答える