1

绕过 Perl 安全信号引起的风险,例如 DBI 文档中的第二个超时示例所示,是否只涉及使用这种绕过的代码?

4

2 回答 2

1

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

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

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

于 2012-08-22T15:04:28.907 回答
1

那有什么意思?通过使用不安全的信号,您可以破坏 Perl 的内部结构和 Perl 变量。如果不可重入 C 库调用被中断,它也可能导致问题。

这可能会导致 SEGFAULT 和其他问题,并且这些问题可能只会在超时生效的块之外表现出来。

于 2012-08-22T15:09:17.623 回答