在污染模式下运行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行是一个perl模块的use语句,该模块本身不使用eval或some_function,但可能使用了另一个使用的库。some_line和some_other_line行号在my-script.cgi或在my-sccript.cgi第39行"使用"的库中似乎都没有意义。
考虑到这个错误,我如何追踪污点错误发生的位置?
我尝试设置一个新的骰子信号处理程序,它应该打印堆栈跟踪,即
$SIG{ __DIE__ } = sub { require Carp; Carp::confess(@_); };
但这似乎对错误没有影响。也许这是一个错误的陷阱信号,发生得不够早,或者需要更复杂的东西。
鲤鱼::总是能很好地处理由污染检查引发的异常。示例输出:
$ 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
这些天我经常使用Devel::SimpleTrace进行调试,最近它帮助我在使用Archive::Zip时发现了一个污点错误。
然而,我不知道它在您的情况下是否有效,因为它本质上是在设置与您使用的相同的sig处理程序。