绕过Perl安全信号时谁受到影响?

时间:2012-08-22 10:15:14

标签: perl signals

绕过Perl安全信号所造成的风险(例如DBI文档中的second timeout example所示)仅涉及使用此类绕过的代码吗?

2 个答案:

答案 0 :(得分:1)

该示例中的代码很难将更改本地化为该部分代码或从中调用的任何代码。

没有100%保证在绕过安全信号的代码之外不会产生任何代码,因为信号不再安全。在该示例中,超时的呼叫是DBI-> connect。对于大多数DBD,这将主要在C中实现,除非C代码可以处理中止并再次尝试,您可能会发现DBD内部的某些数据结构或它使用的库处于不稳定的状态。

示例代码出错的可能性非常小。我在这些问题上的个人轶事是,在安全信号出现之前,我已经使用了传统的Perl信号处理多年,而且很长一段时间我都没有遇到过问题。我对我在信号处理程序中所做的事情一点都不太谨慎。然后我们设法击中了一个实际上在100次运行中大约有1次触发内存损坏的数据集。只是修改信号处理程序以使用更好的做法,类似于示例中的做法,消除了我们的问题。

答案 1 :(得分:1)

这甚至意味着什么?通过使用不安全的信号,您可以破坏Perl的内部和Perl变量。如果非重入C库调用中断,它也会导致问题。

这可能会导致SEGFAULTs和其他问题,而这些问题可能只会在超时生效的块之外出现。