gpt4 book ai didi

perl - 使用 Sys::SigAction::timeout_call 不安全?

转载 作者:行者123 更新时间:2023-12-01 15:35:24 24 4
gpt4 key购买 nike

我刚刚阅读了 Leon Timmermans 的文章 What you should know about signal based timeouts我想知道它如何/是否适用于 Sys::SigAction::timeout_call() 的使用。

1) 首先,似乎 timeout_call() 使用了 longjmp 和不安全信号,因此 CERT Secure Coding rule SIG32-C适用。

2) 如果被监控超时的代码只包含纯 perl 代码(即不调用 XS 模块),使用 timeout_call 是否安全?

最佳答案

1) timeout_call() 使用几乎完全相同的习惯用法将系统调用包装在 eval/alarm block 中,如 Leon 的示例:

my $ALARM_EXCEPTION = "alarm clock restart";
my $h;
eval {
$h = set_sig_handler('ALRM', sub { die $ALARM_EXCEPTION }, { });
alarm 10;
flock $fh, 2 or die "cannot flock: $!";
alarm 0;
};
alarm 0;
$SIG{ALRM} = $h;
if ($@ && $@ !~ quotemeta($ALARM_EXCEPTION)) { die }

因此,如果 set_sig_handler 禁用/覆盖安全信号处理,那么 timeout_call 也会。

2) 纯 Perl 仍然可以与操作系统进行大量交互,并且每个系统调用响应信号的方式在平台之间可能有很大差异。所以一般来说答案是否定的。

关于perl - 使用 Sys::SigAction::timeout_call 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com